У меня есть шаблон PDF, который немного больше, чем A4, и имеет перекрестие около каждого угла, чтобы указать размер страницы A4. Как мне искать, чтобы извлечь эту центрированную часть А4 из негабаритного PDF-файла, чтобы объединить его с другим PDF-файлом формата А4 и создать конечный PDF-файл формата А4?
. Я использовал этот код, адаптированный из Java примера. Он выглядит для Crop / Clip как I sh ... за исключением того, что он все равно заканчивается исходным размером страницы шаблона (больше, чем A4), а не A4, как я ожидал / хотел? Затем я должен решить, как объединить PDF-файл, содержащий текст, который нужно объединить с шаблоном, как только он станет форматом А4.
private void manipulatePdf(string sTemplate, string sDoc, string sOutput)
{
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(sOutput));
Document doc = new Document(pdfDoc, PageSize.A4);
doc.SetMargins(0f,0f,0f,0f);
PdfDocument docTemplateA4Plus = new PdfDocument(new PdfReader(sTemplate));
PdfDocument docTextA4 = new PdfDocument(new PdfReader(sDoc));
PdfPage pageTemplateA4Plus = docTemplateA4Plus.GetPage(1);
PdfPage pageTextA4 = docTextA4.GetPage(1);
iText.Kernel.Geom.Rectangle mediaBoxTemplateA4Plus = pageTemplateA4Plus.GetMediaBox();
iText.Kernel.Geom.Rectangle mediaBoxTextA4 = pageTextA4.GetMediaBox();
float template_llx = mediaBoxTemplateA4Plus.GetX();
float template_lly = mediaBoxTemplateA4Plus.GetY();
float template_w = mediaBoxTemplateA4Plus.GetWidth();
float template_h = mediaBoxTemplateA4Plus.GetHeight();
float text_llx = mediaBoxTextA4.GetX();
float text_lly = mediaBoxTextA4.GetY();
float text_w = mediaBoxTextA4.GetWidth();
float text_h = mediaBoxTextA4.GetHeight();
float llx = ((template_w - text_w) / 2);
float lly = ((template_h - text_h) / 2);
float w = text_w;
float h = text_h;
docTemplateA4Plus.CopyPagesTo(1,1,pdfDoc);
string sCommand = "\nq " + llx.ToString() + " " + lly.ToString() + " " + w.ToString() + " " + h.ToString() + " re W n\nq\n";
PdfPage pdfPage = pdfDoc.GetPage(1);
new PdfCanvas(pdfPage.NewContentStreamBefore(), pdfPage.GetResources(), pdfDoc)
.WriteLiteral(sCommand);
new PdfCanvas(pdfPage.NewContentStreamAfter(), pdfPage.GetResources(), pdfDoc)
.WriteLiteral("\nQ\nQ\n");
doc.Close();
pdfDoc.Close();
}