使用 iTextSharp (.net) 调整带有文本的 pdf 大小

Use iTextSharp (.net) to resize pdf with text

提问人:Linus 提问时间:8/5/2019 最后编辑:Linus 更新时间:8/5/2019 访问量:130

问:

我有一个 PDF,图像上嵌入了文本(TIF 通过 OCR 引擎转换为 PDF)。尺寸为标准尺寸(例如A4,即21cm x 29.7cm)。 但是,我想调整 pdf 的大小以在页面左侧添加边距(例如 1.5 厘米)。

我知道我可以使用 PdfContentByte.AddTemplate(大小为 18.5cmx28.85cm 的模板)来做到这一点(见下文)。

但是,这也将减小模板和图像的大小。如果我替换页面上的图片,图片的尺寸只有 18.5cmx28.85cm,而不是 21cmx29.7cm。

除了使用 AddTemplate 之外,如何调整页面(实际上是文本)的大小?谢谢。

使用 Windows 10、.Net 框架 v4.6.2、iTextSharp 5.5.10

    float fRes = 300f; // resolution of the image
    float fMargin = 0.6f // margin=0.6in=1.5cm

    PdfReader objReader = new PdfReader([Original file]);
    int iPageCount = objReader.NumberOfPages();
    Rectangle rect = objReader.GetPageSizeWithRotation(1);
    System.Drawing.Size sz = new System.Drawing.Size((int)Utilities.PointsToInches(rect.Right) * fRes), (int)Utilities.PointsToInches(rect.Top) * fRes));
    float fWidth = sz.Width / fRes, fScale = (fWidth - fMargin) / fWidth, fScaleXY = (float)sz.Width/(float)sz.Height;
    double dX = 0, dY = 0;
    Document doc = new Document(rect, 0, 0, 0, 0);
    PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream([New file], FileMode.Create));
    doc.Open();
    for (int I = 0; I <= iPageCount; I++)
    {
        PDfImportedPage page = writer.GetImportedPage(objReader, I);
        PdfContentByte cb = writer.DirectContent;
        dX = Utilities.InchesToPoints(fMargin);
        dY = Utilities.InchesToPoints(fMargin * fScaleXY);
        cb.AddTemplate(page, fScale, 0, 0, fScale, dX, dY);
        if (I < iPageCount)
            doc.NewPage();
    }

    doc.Close();
    writer.Close();
    objReader.Close();
.NET itext

评论

0赞 mkl 8/5/2019
将页面向左放大 1.5 厘米可以吗?例如,用 A4 21cm x 29.7cm 制作非标准 22.5cm x 29.7cm。
0赞 Linus 8/5/2019
嗨,这不行,因为替换的图像可能包含模板之外的内容(18.5cmx28.85cm)。即使我更改了原始 pdf 的大小或替换 TIF,这些内容也无法解决。这不是大小问题,而是内容问题。
0赞 Linus 8/5/2019
简而言之,我想将文本和图像分开处理:在保持图像大小的同时缩小文本,以便我可以用另一个图像替换图像。
0赞 mkl 8/5/2019
将文本缩小到当前位置?
0赞 Linus 8/5/2019
不。缩小和移动文本。例如,如果文本位于页面的 (1,1) 厘米处,则它将移动到页面的 (2.5, 3.12) 厘米并减小一点。

答: 暂无答案