Работает ли метод setMargins в iText?

Работает ли метод setMargins в iText обычным способом?

Я пробовал следующее:

System.out.println(f.exists());
Document document = new Document(PageSize.A4,36,36,36,36);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(f.getAbsolutePath()+"0.pdf"));
document.open();

//reader
PdfReader reader = new PdfReader(new FileInputStream(f));
PdfContentByte cb = writer.getDirectContent();

for(int i = 1 ; i < reader.getNumberOfPages()+1 ; i++)
{
  System.out.println(f.getName()+" "+i);
  PdfImportedPage page = writer.getImportedPage(reader, i); 
  document.newPage();
  cb.addTemplate(page,0,0);
}


// Add your new data / text here
// for example...
//document.add(new Paragraph("my timestamp")); 
document.close();

Тем не менее, я получаю тот же вывод, что и мой ввод. Мне интересно, есть ли специальный прием, чтобы заставить метод setMargins работать нормально.

Ответ 1

Метод setMargins работает только до:

document.open();

Ответ 2

Поля могут быть изменены после open(), однако изменения вступают в силу только после newPage().

Добавление PdfImportedPage в качестве "изображения" выполняет PdfImportedPage полей документа.

Пример:

PdfImportedPage page = writer.getImportedPage(reader, i); 
document.add(Image.getInstance(page));

Ответ 3

Вы можете изменить левое и верхнее поля в новом pdf-документе, добавив смещение, вызвав

cb.addTemplate(page, leftMarginOffset,topMarginOffset);

Положительные числа уменьшат маржи, а отрицательные числа увеличат их.

Ответ 4

http://itext.2136553.n4.nabble.com/Adding-extra-margins-to-existing-PDF-Using-5-0-4-td3305175.html

использование приведенного выше фрагмента кода работает для меня.

здесь моя версия.

import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Utilities;

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

public class PngToPdf2 {

    private static float points15mm = Utilities.millimetersToPoints(15);

    public static void main(String arg[]) throws Exception {
        File folder = new File("C:\\Users\\mamabile\\Desktop\\print-bulk-5");
        String outputFile = "output.pdf";
        List<String> files = new ArrayList<String>();
        files.add("newimage.png");
        //files.add("page2.jpg");

        Document document = new Document(PageSize.A4);
        PdfWriter.getInstance(document, new FileOutputStream(new File(folder, outputFile)));

        float maxwidth = document.getPageSize().getWidth() - points15mm * 2;

        document.open();
        for (String f : files) {

            document.newPage();
            Image image = Image.getInstance(new File(folder, f).getAbsolutePath());
            image.scaleToFit(maxwidth, PageSize.A4.getHeight());
            image.setAbsolutePosition(points15mm, points15mm);
            //image.setRotationDegrees(reader.getPageRotation(i)==270?90:0);
            image.setCompressionLevel(9);
            image.simplifyColorspace();
            document.add(image);
        }
        document.close();
   }
}