123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- // Copyright 2015 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef PDF_PDF_TRANSFORM_H_
- #define PDF_PDF_TRANSFORM_H_
- namespace gfx {
- class PointF;
- class Rect;
- class SizeF;
- } // namespace gfx
- namespace chrome_pdf {
- // A rect struct for use with FPDF bounding box functions.
- // With PDFs, origin is bottom-left.
- struct PdfRectangle {
- float left;
- float bottom;
- float right;
- float top;
- };
- // Calculate the scale factor between `content_rect` and a page of `src_size`.
- //
- // `content_rect` specifies the printable area of the destination page, with
- // origin at left-bottom. Values are in points.
- // `src_size` specifies the source page size in points.
- // `rotated` True if source page is rotated 90 degree or 270 degree.
- float CalculateScaleFactor(const gfx::Rect& content_rect,
- const gfx::SizeF& src_size,
- bool rotated);
- // Make the default size to be letter size (8.5" X 11"). We are just following
- // the PDFium way of handling these corner cases. PDFium always consider
- // US-Letter as the default page size.
- void SetDefaultClipBox(bool rotated, PdfRectangle* clip_box);
- // Set the media box and/or crop box as needed. If both boxes are there, then
- // nothing needs to be done. If one box is missing, then fill it with the value
- // from the other box. If both boxes are missing, then they both get the default
- // value from SetDefaultClipBox(), based on `rotated`.
- void CalculateMediaBoxAndCropBox(bool rotated,
- bool has_media_box,
- bool has_crop_box,
- PdfRectangle* media_box,
- PdfRectangle* crop_box);
- // Compute source clip box boundaries based on the crop box / media box of
- // source page and scale factor.
- // Returns the computed source clip box values.
- //
- // `media_box` The PDF's media box.
- // `crop_box` The PDF's crop box.
- PdfRectangle CalculateClipBoxBoundary(const PdfRectangle& media_box,
- const PdfRectangle& crop_box);
- // Scale `rect` by `scale_factor`.
- void ScalePdfRectangle(float scale_factor, PdfRectangle* rect);
- // Calculate the clip box translation offset for a page that does need to be
- // scaled. All parameters are in points.
- //
- // `content_rect` specifies the printable area of the destination page, with
- // origin at left-bottom.
- // `source_clip_box` specifies the source clip box positions, relative to
- // origin at left-bottom.
- // Returns the final translation offsets for the source clip box, relative to
- // origin at left-bottom.
- gfx::PointF CalculateScaledClipBoxOffset(const gfx::Rect& content_rect,
- const PdfRectangle& source_clip_box_);
- // Calculate the clip box offset for a page that does not need to be scaled.
- // All parameters are in points.
- //
- // `rotation` specifies the source page rotation values which are N / 90
- // degrees.
- // `page_width` specifies the screen destination page width.
- // `page_height` specifies the screen destination page height.
- // `source_clip_box` specifies the source clip box positions, relative to origin
- // at left-bottom.
- // Returns the final translation offsets for the source clip box, relative to
- // origin at left-bottom.
- gfx::PointF CalculateNonScaledClipBoxOffset(
- int rotation,
- int page_width,
- int page_height,
- const PdfRectangle& source_clip_box);
- } // namespace chrome_pdf
- #endif // PDF_PDF_TRANSFORM_H_
|