Después del documento de cambio de tamaño, el nuevo contenido tiene como mismo tamaño. Cómo guardar nuevo tamaño en ByteArrayOutputStream?

mflorczak:

Tengo un problema con el documento de tamaño. Paso orientación vertical (595.0x842.0) pdf y orientación cambio que pdf a (842.0x595.0) pero horizontal Cuando regrese ByteArrayOutputStreamcomo ByteArray y trato de leer este ByteArray consigo orientación vertical (595.0x842.0) en lugar horizontal (842,0 x595.0)

Para escribir nuevos contenidos utilizo PDFWriter y le envío Documentcon el nuevo tamaño y ByteArrayOutputStreamcomo segundo parametr.

PdfReader reader = new PdfReader(pdf.getFile());
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Document document = new Document(PageSize.A4.rotate(), 0, 0, 0, 0);
PdfWriter writer = PdfWriter.getInstance(document, outputStream);

Espero que la salida horizontal (842.0x595.0) en lugar (595.0x842.0)

Necesito esta dimensión en este código:

PdfReader reader = new PdfReader(pdf.getFile());
            int n = reader.getNumberOfPages();
            PdfStamper stamper = new PdfStamper(reader,outputStream);
            PdfContentByte pageContent;
            for (int i = 0; i < n;) {
                pageContent = stamper.getOverContent(++i);
                System.out.println(reader.getPageSize(i));
                ColumnText.showTextAligned(pageContent, Element.ALIGN_RIGHT,
                        new Phrase(String.format("page %s of %s", i, n)), 
                            reader.getPageSize(i).getWidth()- 20, 20, 0);
            }

Esta variable pdf.getFile()es un ByteArray ( ByteArrayOutputStream) desde el código anterior. Espero que el número de página en la esquina inferior derecha (X Punto 842), pero real es 595. Para entender mejor envío pantalla.

introducir descripción de la imagen aquí

MKL:

Se utiliza el PdfReadermétodo getPageSize, sino que debe utilizar getPageSizeWithRotation, es decir, se debe reemplazar

System.out.println(reader.getPageSize(i));
ColumnText.showTextAligned(pageContent, Element.ALIGN_RIGHT,
        new Phrase(String.format("page %s of %s", i, n)), 
            reader.getPageSize(i).getWidth()- 20, 20, 0);

por

System.out.println(reader.getPageSizeWithRotation(i));
ColumnText.showTextAligned(pageContent, Element.ALIGN_RIGHT,
        new Phrase(String.format("page %s of %s", i, n)), 
            reader.getPageSizeWithRotation(i).getWidth()- 20, 20, 0);

los Fondos

Hay dos propiedades de una página responsables de la dimensión última página visualizada: MediaBox y Girar . (Vamos a ignorar por el momento el cuadro de recorte y todas las otras cajas que también existen).

Una página A4 paisaje, por lo tanto, se puede crear de dos formas conceptualmente diferentes, ya sea como caja un 842x595 medios de comunicación con 0 ° (o 180 °) de rotación o como 595x842 medios caja con 90 ° (o 270 °) de rotación.

Si se ejemplariza una Documentcon PageSize.A4.rotate(), iText utiliza la última forma. (Si instanciarlo con new RectangleReadOnly(842,595), iText habría utilizado el antiguo camino.)

PdfReader.getPageSizesólo se inspecciona la caja de medios. Por lo tanto, devuelve un rectángulo con un ancho de 595 para su página de noticias con la caja de medios 595x842 y 90 ° de rotación.

PdfReader.getPageSizeWithRotationTambién inspecciona la rotación de la página. Por lo tanto, devuelve un rectángulo con un ancho de 842 para su página de noticias con la caja de medios 595x842 y 90 ° de rotación.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=227994&siteId=1
Recomendado
Clasificación