我有幾個 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);
}
就頁面的基本內容而言,它可以作業,但它會丟失書簽和評論(我沒有帶評論的 PDF)。事實上,這就像列印和重新掃描頁面一樣,所以我想要小心你的要求,但是我該怎么做才能從頁面上復制所有內容,基本上是復制源 PDF,只是在更大的頁面上?
就其價值而言,PDF 永遠不會包含實時表單、作品集、帶有附件的 PDF 或帶有音頻或視頻的 PDF。它們將始終是從紙張掃描或從應用程式“列印”的 PDF。
uj5u.com熱心網友回復:
正如@KJ 已經在評論中暗示的那樣,如果想要更改檔案的某些細節但保留所有內容,則不應嘗試逐頁復制 PDF 并希望所有內容保持完整,更不用說從原始檔案創建表單 XObjects頁面并將它們添加到新頁面,這更加有損。
在 iText 中,您應該在沖壓模式下處理 PDF ,即PdfDocument基于 aPdfReader和 來創建一個PdfWriter,并且僅應用所需的更改。
在手頭的情況下,可以這樣做(iText 7.2.0):
float resultWidth = 8.5f * 72;
float resultHeight = 11f * 72;
using (PdfDocument pdfDocument = new PdfDocument(new PdfReader(INFILE), new PdfWriter(OUTFILE)))
{
for (int i = 1; i <= pdfDocument.GetNumberOfPages(); i )
{
var page = pdfDocument.GetPage(i);
var cropBox = page.GetCropBox();
var newCropBox = new Rectangle(cropBox.GetLeft() - (resultWidth - cropBox.GetWidth()) / 2,
cropBox.GetBottom() - (resultHeight - cropBox.GetHeight()) / 2, resultWidth, resultHeight);
var mediaBox = page.GetMediaBox();
var newMediaBox = Rectangle.GetCommonRectangle(mediaBox, newCropBox);
page.SetMediaBox(newMediaBox);
page.SetCropBox(newCropBox);
}
}
(ResizePages測驗ResizeForRobertSF)
在沖壓模式下,我們在這里檢查原始 PDF 每一頁的裁剪框和媒體框,將前者的大小調整為 8.5"×11",并確保媒體框包含更新的裁剪框。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/354883.html
