Ho il seguente codice semplificato per estrarre PDF 8x10 esistenti da più posizioni, ruotandoli se necessario (quasi tutti devono essere), quindi li scrivo in una singola pagina PDF 11x17 di pagina ...Ruota più PDF e scrivi su un singolo PDF
while (Page < StackOne.Length)
{
Files++;
using (var strm = new FileStream(RenderPath + "Test_" + Page + ".pdf", FileMode.Create, FileAccess.Write, FileShare.Read))
{
using (var MasterReport = new iTextSharp.text.Document(iTextSharp.text.PageSize._11X17))
{
using (var writer = PdfWriter.GetInstance(MasterReport, strm))
{
MasterReport.Open();
MasterReport.NewPage();
var cb = writer.DirectContent;
for (; Page <= NumPages * Files && Page < StackOne.Length; Page++)
{
var ProductionEntry = StackOne[Page - 1];
var filepath = NetPath + ProductionEntry.UniqueProductId + ".pdf";
if (File.Exists(filepath))
{
var reader = new PdfReader(filepath);
var pagesize = reader.GetPageSize(1);
if (pagesize.Height > pagesize.Width)
{
var ExistingPage = reader.GetPageN(1);
var rotation = ExistingPage.GetAsNumber(PdfName.ROTATE);
int desiredrot = 90;
if (rotation != null)
{
desiredrot += rotation.IntValue;
desiredrot %= 360;
}
ExistingPage.Put(PdfName.ROTATE, new PdfNumber(desiredrot));
}
cb.AddTemplate(writer.GetImportedPage(reader, 1), 50, 50);
}
MasterReport.NewPage();
}
}
}
}
}
Tuttavia, la pagina visualizzata non ha le pagine ruotata come dovrebbero essere, ho verificato l'altezza è infatti in fase di presa> ramo larghezza ma le pagine restituite sono ancora 8x10 invece di 10x8 scritto su ogni pagina 11x17.
Ho cercato una domanda specifica ma non ho trovato uno che non si limitasse a scrivere su un altro file o sull'intera pagina anziché su una posizione specifica su un foglio 11x17.
EDIT: Così, con un po 'di sperimentazione e, cercando in altri esempi sono in grado di ruotare la pagina 8x10 e scrivere al mio 11x17 ma purtroppo non riesco a trovare un modo per metterlo esattamente dove mi vuole che qui è il relativo frammento di codice:
var reader = new PdfReader(filepath);
var tm = new AffineTransform(1.0F, 0, 0, 1.0F, x, y);
if (reader.GetPageSize(1).Height > reader.GetPageSize(1).Width)
tm.SetTransform(0, -1f, 1f, 0, 0, reader.GetPageSize(1).Height);
writer.DirectContent.AddTemplate(writer.GetImportedPage(reader, 1), tm);
Mentre PdfCopy è il metodo consigliato per risolvere il problema, non sono riuscito a trovare alcuna documentazione che supporti la scrittura di più pagine su una singola pagina e tanto meno la rotazione. DirectContent sembrava essere l'unico modo per farlo. (Anche http://developers.itextpdf.com/examples/merging-pdf-documents/create-booklet-a4-document) – JasonSec
'PdfCopy' è consigliato se vuoi avere le pagine il più originali possibile, ma sei interessato cambiandolo ridimensionando e arrangiando con più altre pagine. – mkl
@mkl Questa è stata anche la mia impressione, grazie per aver verificato. – JasonSec