Печать на предварительно отпечатанном бланке на Java

#java #printing

#java #печать

Вопрос:

В моем веб-приложении я должен распечатать отчет в предварительно распечатанном стационарном.

Какие параметры в JAVA я могу использовать для печати. Существуют и другие требования, например, если текст не помещается на одной странице, то для печати следует использовать следующую страницу.

Кроме того, некоторые другие запросы, которые я имею в виду:

  1. Будет ли ширина символов играть роль? «i» и «w», например. принимает различную ширину символов.
  2. Будет ли печать также зависеть от используемого принтера?

Кроме того, у меня есть веб-приложение, и печать должна выполняться на клиентском компьютере на принтере клиента.

Комментарии:

1. Намного проще, если вы можете использовать шрифт фиксированной ширины. Возможно ли это?

2. для этой цели используйте моноширинный шрифт

3. Как таковых ограничений на используемый шрифт нет. Но отчет может содержать данные на английском или каннада-языке или на обоих языках одновременно.

4. Имеет ли язык каннада шрифты фиксированной ширины?

5. Почему шрифт фиксированной ширины может помочь? Любой приличный механизм верстки может переносить, подгонять и более или менее автоматически разбивать слова при настройке текста с использованием пропорционального шрифта. Однако может быть сложно найти программируемый механизм компоновки с поддержкой Kannada вообще.

Ответ №1:

Я бы использовал XSL-FO для создания шаблона макета с абсолютно расположенными блочными контейнерами, соответствующими каждому из полей вашей бумажной формы. Это позволит вам точно расположить текст и ограничить размер текстового блока (используя overflow=»hidden»).

Затем вы можете использовать Apache FOP для создания файла PDF из вашего исходного файла XSL-FO.

Например. используя этот исходный файл:

 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" language="EN">
    <fo:layout-master-set>
        <fo:simple-page-master page-width="21cm" page-height="29.7cm" master-name="A4">
            <fo:region-body margin-bottom="0mm" margin-top="0mm"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="A4">
        <fo:flow reference-orientation="0" border-collapse="collapse" flow-name="xsl-region-body">
            <fo:block-container position="absolute" top="3cm" left="3cm" height="2cm" width="5cm" overflow="hidden">
                <fo:block font-family="Times" font-size="14pt" color="red">
                    Absolute at top=3cm/left=3cm - Lorem ipsum dolor sit amet, consetetur sadipscing elitr
                </fo:block>
            </fo:block-container>
            <fo:block-container position="absolute" top="4cm" left="9cm" height="2cm" width="5cm" overflow="hidden">
                <fo:block font-family="Arial Unicode MS" font-size="14pt" color="blue">
                    Absolute at top=4cm/left=9cm - ನಾಮಪ್ರತ್ಯಯಗಳ ಮೋದಲನೇ ವರ್ಗ
                </fo:block>
            </fo:block-container>
        </fo:flow>
    </fo:page-sequence>
</fo:root>
  

создаст следующий файл PDF.

При печати файла PDF вы должны убедиться, что программа просмотра PDF не пытается масштабировать выходные данные, чтобы они соответствовали доступному пространству для печати (я думаю, что эта опция по умолчанию включена в Adobe Acrobat Reader).

Комментарии:

1. во-первых, большое спасибо за приложенные вами усилия! У меня есть динамический контент, который необходимо распечатать. Я знаю, что могу использовать <xsl:value-of select=»@value»/> и использовать XML для динамической печати значения в формате pdf. Однако у меня есть требование, например, высота ячейки также не должна быть превышена и при необходимости перемещена на следующую страницу. Как я справлюсь с этим, используя XSL-FO?

2. @Ankit: Если мой ответ решает ваш первоначальный вопрос, пожалуйста, проголосуйте и / или примите его. Если у вас есть новый вопрос, вы должны задать новый вопрос, а не публиковать его в качестве комментария здесь.

3. Это было частью первоначального вопроса. Пожалуйста, прочитайте вопрос еще раз.

Ответ №2:

Существует класс FontMetrics, и методы этого класса помогают вам вычислить ширину строки в пикселях.

Ваше приложение должно знать используемое вами разрешение печати, DPI, точек на дюйм.

Таким образом, вы можете определить ширину печати вашего текста в дюймах с помощью операции

 textsizeinpixels/DPI
  

где DPI — это разрешение вашего принтера.

Ответ №3:

Другим вариантом было бы использовать JODReports (бесплатно) или Docmosis (не бесплатно). Поскольку эти инструменты основаны на документах doc или odt в качестве шаблонов, вы можете использовать в своем шаблоне такие свойства, как «сохранить в следующем» и «разрешить разрыв строки по страницам», чтобы убедиться, что при создании документа он переходит на следующую страницу, как вам требуется. Пожалуйста, обратите внимание, что я работаю в компании, которая создала Docmosis.

Я надеюсь, что это поможет.