【发布时间】:2021-12-21 00:14:31
【问题描述】:
我有几个页面大小奇数的 PDF,略小于 8.5x11。这些页面需要为 8.5x11,其内容居中且无需调整大小。这可以通过在 8.5x11 纸张上以实际尺寸和设置为自动的方向打印页面来实现,然后重新扫描打印的页面,但是浪费时间和纸张并且可能会降低质量。经过大量谷歌搜索和搜索https://api.itextpdf.com/,我在 C# 中使用 iText 7.1.14 提出了这个:
public void FixSize() // method in PDFentry class
{
// FQFName is the string property Fully Qualified File Name
PdfDocument srceDoc = new PdfDocument(new PdfReader(FQFName));
int pageCount = srceDoc.GetNumberOfPages();
string tempFile = Path.GetTempFileName();
PdfDocument destDoc = new PdfDocument(new PdfWriter(tempFile));
iText.Kernel.Geom.PageSize newPageSize = iText.Kernel.Geom.PageSize.LETTER;
// this is in a try/catch, removed here for brevity
for (int page = 1; page <= pageCount; page++)
{
PdfPage srcPage = srceDoc.GetPage(page);
PdfPage dstPage = destDoc.AddNewPage(newPageSize);
PageXObject pageXObject = srcPage.CopyAsFormXObject(destDoc);
PdfCanvas pdfCanvas = new PdfCanvas(dstPage);
// 18 is temporary to be replaced with a variable parameter
pdfCanvas.AddXObjectAt(pageXObject, 18, 18);
pdfCanvas.Release();
}
srceDoc.Close();
destDoc.Close();
File.Copy(tempFile, FQFName, true);
File.Delete(tempFile);
}
就页面的基本内容而言,它可以工作,但它会丢失书签,并且可能还会丢失 cmets(我没有带有 cmets 的 PDF)。事实上,就好像页面被打印并重新扫描一样,所以我想要小心你的要求,但是我会怎么做才能从页面复制所有内容,本质上是复制源 PDF,只是在较大的页面上?
无论如何,PDF 绝不会包含实时表单、作品集、带有附件的 PDF 或带有音频或视频的 PDF。它们始终是从纸上扫描或从应用程序“打印”出来的 PDF。
【问题讨论】:
-
谢谢,但我希望在代码 (iText7) 中完成,而不是通过 Acrobat 阅读器的菜单。
-
@KJ 是的,但问题是书签。从源 PDF 到目标 PDF 的过程中迷路了。