简体   繁体   English

PDF小丑:创建列表

[英]PDF Clown: creating lists

I'm looking to programmatically create PDF files using PDF Clown in Java. 我希望使用Java中的PDF Clown以编程方式创建PDF文件。 I require the use of lists, with bullet points. 我需要使用带有要点的列表。 Is this possible using the current stable release of PDF Clown? 使用当前稳定的PDF Clown版本可以做到这一点吗? If so, which class should I look at in the API Documentation? 如果是这样,我应该在API文档中查看哪个类? I have search for lists in the documentation however there is no mention of it. 我在文档中搜索列表,但是没有提及。

The only way I can think of doing this without specific support is by using a BlockComposer with an X offset, this however would not have Bullet points. 在没有特殊支持的情况下,我可以想到的唯一方法是使用具有X偏移量的BlockComposer,但是,它没有Bullet点。 Any solutions? 有什么办法吗?

I realise that this feature is planned for the next release of PDF Clown (0.2.0) however it is too far away for me to wait for it. 我意识到该功能已计划在下一版的PDF Clown(0.2.0)中使用,但它离我太远了,无法等待它。

You can do it like this 你可以这样 在此处输入图片说明

import org.pdfclown.documents.Document;
import org.pdfclown.documents.contents.colors.DeviceRGBColor;
import org.pdfclown.documents.contents.composition.*;

. . .

DocumentComposer composer = new DocumentComposer(document);

/*
  We decide that table cells sport a solid border by default (analogous 
  to CSS styles defined through an element type selector).
*/
composer.getStyle(Cell.class)
  .withBorder(new Border(
    new QuadColor(new DeviceRGBColor(0, 0, 0)),
    new QuadBorderStyle(BorderStyleEnum.Solid),
    new QuadLength(new Length(1)),
    new QuadCornerRadius()))
  .withPadding(new QuadLength(new Length(5)));

/*
  The list will be included in a section.
*/
Section section = new Section("Hello World, this is PDF Clown!");

/*
  This is the actual list composition.
*/
List list = new List(
  new ListItem("Item 1"),
  new ListItem("Item 2"),
  new ListItem(
    /* We decide that this list item has an arbitrary 5pt margin. */
    new Style().withMargin(new QuadLength(new Length(5))),
    "Item 3 (margin: 5pt)"
    ),
  new ListItem("Item 4"),
  new ListItem("Item 5"),
  new ListItem(
    /* We decide that this list item has a custom background color, border and padding. */
    new Style()
      .withBackground(new Background(new DeviceRGBColor(252f/255, 232f/255, 131f/255)))
      .withBorder(new Border(
        new QuadColor(new DeviceRGBColor(218f/255, 165f/255, 32f/255)),
        new QuadBorderStyle(BorderStyleEnum.Dotted),
        new QuadLength(new Length(2)),
        new QuadCornerRadius(new Size(5))
        ))
      .withPadding(new QuadLength(new Length(10))),
    new Paragraph("Item 6 (background, border, padding test + nested table)"
      + "\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor "
      + "incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud "
      + "exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure "
      + "dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. "
      + "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt "
      + "mollit anim id est laborum."),
    /* Nested table. */
    new Table(
      new Row(
        new Cell("Cell1,1"),
        new Cell("Cell1,2"),
        new Cell("Cell1,3"),
        new Cell("Cell1,4")
        ),
      new Row(
        new Cell("Cell2,1"),
        new Cell("Cell2,2").withColSpan(2),
        new Cell("Cell2,4")
        )
      )
  ),
  new ListItem(
    new Paragraph("Item 7 (sublist test)"),
    /* Nested list. */
    new List(
      /* We decide this nested list sports circle markers. */
      new Style().withListStyle(new ListStyle(ListStyleTypeEnum.Circle)),
      new ListItem("Sublist Item 1"),
      new ListItem(
        new Paragraph("Sublist Item 2 (Sub-sublist with multiple custom markers mimicking an ordered list)"),
        /* Level-2 nested list (custom ordered markers). */
        new List(
          /*
            We decide this nested list sports a set of custom numerical symbols mapped
            as octal codes to ZapfDingbats character set (see PDF Reference 1.7, § D.5, http://www.adobe.com/devnet/pdf/pdf_reference.html).
          */
          new Style().withListStyle(new ListStyle(new char[]{0312, 0313, 0314, 0315, 0316, 0317, 0320, 0321, 0322})),
          new ListItem("Sub-sublist Item 1"),
          new ListItem("Sub-sublist Item 2"),
          new ListItem("Sub-sublist Item 3"),
          new ListItem("Sub-sublist Item 4"),
          new ListItem("Sub-sublist Item 5")
          )
        ),
      new ListItem("Sublist Item 3"),
      new ListItem(
        new Paragraph("Sublist Item 4 (Sub-sublist with decimal markers)"),
        /* Level-2 nested list (decimal markers). */
        new List(
          new Style().withListStyle(new ListStyle(ListStyleTypeEnum.Decimal)),
          new ListItem("Sub-sublist Item 1"),
          new ListItem(
            new Paragraph("Sub-sublist Item 2 (Sub-sub-sublist with lower-latin markers)"),
            /* Level-3 nested list (lower-latin markers). */
            new List(
              new Style().withListStyle(new ListStyle(ListStyleTypeEnum.LowerLatin)),
              new ListItem("Sub-sub-sublist Item 1"),
              new ListItem("Sub-sub-sublist Item 2"),
              new ListItem("Sub-sub-sublist Item 3"),
              new ListItem("Sub-sub-sublist Item 4"),
              new ListItem("Sub-sub-sublist Item 5")
              )
            ),
          new ListItem("Sub-sublist Item 3"),
          new ListItem("Sub-sublist Item 4"),
          new ListItem("Sub-sublist Item 5")
          )
        ),
      new ListItem("Sublist Item 5")
      ),
    new Paragraph("End of Item 7")
    ),
  new ListItem("Item 8")
  );
section.add(list);

composer.show(section);
composer.close();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM