PDF

      在〈PDF〉中尚無留言

將資料從印表機列印出來,其實是一個很煩雜的項目。微軟也開發了 FlowDocument 套件,此套件有人說好用的,但本人發現其實超爛的。而且最近Win 10 更新後圖片都無法列印,所以並不建議使用 FlowDocument 來列仙資料。

目前最方便,最好用的方式,就是先製作 pdf 檔,然後在視窗中將儲存的 pdf 顯示出來。

最好用的套件就屬iText 7 了

安裝套件

首先從工具/NuGet 套件管理員/管理方案的NuGet套件,然後搜尋 iText 7 套件並進行安裝

簡易使用

首先從工

using iText.Kernel.Font;
using iText.Kernel.Geom;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
using TextAlignment=iText.Layout.Properties.TextAlignment;

namespace pdf
{
    ///
    /// Interaction logic for MainWindow.xaml
    /// 
    public partial class MainWindow : Window
    {
        string path = @"c:\temp";
        Document doc;
        string pdfFile;
        PdfDocument pdf;
        Paragraph paragraph;
        public MainWindow()
        {
            InitializeComponent();
            new Thread(Search).Start();
        }

        private void Window_Unloaded(object sender, RoutedEventArgs e)
        {
            web.Navigate("about:blank");
        }
        private void Search() {
            pdfFile = DateTime.Now.ToString("yyyyMMddHHmmssffff");
            pdf = new PdfDocument(new PdfWriter(string.Format("{0}/{1}.pdf", path, pdfFile)));
            doc = new Document(pdf);
            makePdf1();
            makePdf2();
            doc.Close();

            Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
            {
                psStack.Visibility = Visibility.Collapsed;
                web.Navigate(string.Format("{0}/{1}.pdf", path, pdfFile));
            }));
        }
        private void makePdf1()
        {
            pdf.SetDefaultPageSize(PageSize.A4);
            doc.SetFont(PdfFontFactory.CreateFont("c:/Windows/Fonts/kaiu.ttf"));
            paragraph = new Paragraph()
                .SetTextAlignment(TextAlignment.CENTER)
                .Add(new Text("台北市政府新建工程處").SetFontSize(20))
                .Add(new Text("\n第一頁").SetFontSize(16));
            doc.Add(paragraph);
            doc.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
        }
        private void makePdf2()
        {
            doc.SetFont(PdfFontFactory.CreateFont("c:/Windows/Fonts/kaiu.ttf"));
            paragraph = new Paragraph()
                .SetTextAlignment(TextAlignment.CENTER)
                .Add(new Text("台北市政府新建工程處").SetFontSize(20))
                .Add(new Text("\n第二頁").SetFontSize(16));
            doc.Add(paragraph);
        }
    }
}

todo

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *