How to prevent the resizing of pages in PDF?

2019-05-23 13:54发布

问题:

I want to have a pdf file that contains no difference between actual size vs fit to page at printing. I tried with the following example, but not works, only the width will be locked, not the height. Is there any solution?

package etiq;

import java.io.FileOutputStream;

import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.PageSize;
import com.lowagie.text.Phrase;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;

public class TestHeight {
  public static void main(String[] args) {
    Document document = new Document(PageSize.A4, 50, 50, 50, 50);
    try {
        String path = "D:\\test.pdf";
        FileOutputStream output = new FileOutputStream(path);
      PdfWriter writer = PdfWriter.getInstance(document, output);
      document.open();

      PdfPTable table = new PdfPTable(2);
      table.setTotalWidth(400);
      table.setLockedWidth(true);
      table.getDefaultCell().setBorder(Rectangle.NO_BORDER);
      table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
      table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE);
      table.getDefaultCell().setFixedHeight(70);
      table.addCell("!");
      table.addCell("Text Text Text Text Text Text ");
      table.addCell(new Phrase(new Chunk("cell")));
      table.addCell("Text Text ");
      table.addCell(new Phrase(new Chunk("cell")));
      table.addCell("Text Text Text ");
      table.addCell(new Phrase(new Chunk("cell")));
      table.addCell("Text \nText \nText ");
      table.addCell(new Phrase(new Chunk("cell")));
      table.addCell("Text ");
      table.addCell(new Phrase(new Chunk("cell")));
      table.addCell("Text ");
      table.addCell(new Phrase(new Chunk("cell")));
      table.addCell("Text ");
      table.addCell(new Phrase(new Chunk("cell")));
      document.add(table);

    } catch (Exception de) {
      de.printStackTrace();
    }
    document.close();
  }
}

回答1:

Please take a look at the PrintPreferences example. In this example, several print preferences are explained. The line that is important to you, will make sure that the page isn't scaled when printed:

writer.addViewerPreference(PdfName.PRINTSCALING, PdfName.NONE);

This is the only parameter you can set to influence the print setting. You can't tell a viewer that it needs to fit the page to the size of the printer page. You can only instruct the viewer that the actual size needs to be taken, by setting the PRINTSCALING to NONE.

If you want some other behavior, you're asking for something that is impossible in PDF.



标签: pdf itext