0

iTextSharpから生成されたPDFでスタイルを設定しようとしています。

SetListSymbolアイテムを一覧表示するようにSymbolを設定しようとすると、が機能しないようです。

以下は私が使用したコードです:

var elements = HTMLWorker.ParseToList(overviewReader,null);

foreach (var element in elements)
{
    //element
    var list = element as List;
    if (list != null)
    {
        //list.Symbol.GetImage();
        list.SetListSymbol("\u25A0");
        list.IndentationLeft = 20f;
        doc.Add(list);
    }
    else
    {
        doc.Add(element);
    }
}
4

2 に答える 2

1

内のHTMLWorkeriTextおよびiTextSharpは、を介していくつかの非常に限定された「スタイルシート」をサポートしますiTextSharp.text.html.simpleparser.StyleSheet。これらのスタイルシートは、大まかにHTML / CSSプロパティに基づいていますが、最も基本的なものにすぎません(HTML 3.2を考えてください)。

あなたがしたい3つの主なことは(1)フォントをロードすること、(2)StyleSheetそのフォントへのポインティングを作成すること、そして(3)をにバインドするStyleSheetことHTMLWorkerです。ここで私の答えからいくつかのコードを部分的に持ち上げます。

iTextSharpは、フォントを探すためにシステム全体を自動的にスパイダーするわけではないため、手動でフォントを登録する必要があります。(実際には、iTextSharpを呼び出して、フォントのロードを推測するように指示できるメソッドがありますが、これははるかに高速です。)

ステップ1、フォント(この場合はCurlz)をロードします

//Path to our font
string OurFont = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "CURLZ___.TTF");
//Register the font with iTextSharp
iTextSharp.text.FontFactory.Register(OurFont);

ステップ2、を作成し、StyleSheetそれをフォントにポイントします。他にも、見せびらかすためにいくつかのプロパティを設定します。

//Create a new stylesheet
iTextSharp.text.html.simpleparser.StyleSheet ST = new iTextSharp.text.html.simpleparser.StyleSheet();
//Set the default body font to our registered font's internal name
ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI, iTextSharp.text.html.HtmlTags.FACE, "Curlz MT");
ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI, iTextSharp.text.html.HtmlTags.COLOR, "FF0000");
ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI, iTextSharp.text.html.HtmlTags.SIZE, "50");

ステップ3、をにバインドStyleSheetしますHTMLWorker

//Use our StyleSheet from above when parsing
var elements = HTMLWorker.ParseToList(overviewReader, ST);

以下は、iTextSharp 5.2.0をターゲットとする完全に機能するC#WinFormsアプリであり、上記のすべてを誇示しています。

using System;
using System.IO;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.html.simpleparser;
using iTextSharp.text.pdf;

namespace WindowsFormsApplication2 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e) {
            //Path to our font
            string FontArial = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "CURLZ___.TTF");
            //Register the font with iTextSharp
            iTextSharp.text.FontFactory.Register(FontArial);

            //Create a new stylesheet
            iTextSharp.text.html.simpleparser.StyleSheet ST = new iTextSharp.text.html.simpleparser.StyleSheet();
            //Set the default body font to our registered font's internal name
            ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI, iTextSharp.text.html.HtmlTags.FACE, "Curlz MT");
            ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI, iTextSharp.text.html.HtmlTags.COLOR, "FF0000");
            ST.LoadTagStyle(iTextSharp.text.html.HtmlTags.LI, iTextSharp.text.html.HtmlTags.SIZE, "50");

            //Sample HTML
            var html = @"<ul><li>Test</li></ul>";
            //File to output
            var outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.pdf");
            //Basic PDF creation, nothing special here
            using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None)) {
                using (Document doc = new Document(PageSize.LETTER)) {
                    using (PdfWriter writer = PdfWriter.GetInstance(doc, fs)) {
                        doc.Open();
                        //Bind a reader to our HTML
                        using (StringReader overviewReader = new StringReader(html)) {
                            //Use our StyleSheet from above when parsing
                            var elements = HTMLWorker.ParseToList(overviewReader, ST);
                            //Loop through each element
                            foreach (var element in elements) {
                                //See if the element is a list item
                                var list = element as List;
                                if (list != null) {
                                    //Set some properties
                                    list.SetListSymbol("\u25A0");
                                    list.IndentationLeft = 20f;
                                }
                                //Add the element to the document
                                doc.Add(element);
                            }
                        }
                        doc.Close();
                    }
                }
            }
            this.Close();
        }
    }
}
于 2012-05-18T13:16:32.610 に答える
0

リストオブジェクト=HTMLWorker.ParseToList(new StringReader(format)、null);

                foreach (IElement element in objects)
                {

                    List list = new List();
                    list.SetListSymbol("\u2022");
                    list.IndentationLeft = 20f;                        
                    list.Add(element);
                    if (list.Chunks.Count == 0)
                    {
                        doc1.Add(element);
                    }
                    else
                    {
                        doc1.Add(list);
                    }
                }
于 2012-06-07T10:16:26.757 に答える