按照iText夏普(Sharp)的PDF文档操作

by admin on 2019年1月9日

耧草可以两三私家彼从前进,不过相对无法抢到别人面前去,这样会惹起众怒,会收获我们的一顿猛批。

  

耧草,也是咱们日常应用的拾草方法。这种情势首要用以冬冬天节。特别是冬季雪融化将来,原来挺直的枯草被雪压断,被冰冻断了,躺在荒郊里,地面潮湿,用耙子一耧,断草很听话,遵照先后顺序,一层一层摞到耙子下面,一会儿功力就会耧一大耙子,回到篮子跟前,从耙子中校干草退下来,放到篮子里。

/// <summary>
/// 生成拣货标签pdf文件
/// </summary>
/// <param name="modelTrade"></param>
/// <param name="dhlLabelFolderName"></param>
/// <returns></returns>
public static string CreatePickupLabel(TradeModel modelTrade,string dhlLabelFolderName)
{
    //参考地址
    //https://www.cnblogs.com/yangy1989/p/5300304.html
    //http://blog.csdn.net/lideyuans/article/details/51536676 (设置图片百分比)

    //组装,待生成的pdf文件完整路径
    string logisticsNo = modelTrade.R;
    string pdfFileName = dhlLabelFolderName + logisticsNo + "_Label.pdf";

    FileStream fs = new FileStream(pdfFileName, FileMode.Create);
    pdfText.Rectangle rect = new pdfText.Rectangle(0f, 0f, 1000f, 1000f);
    pdfText.Document document = new pdfText.Document(rect, 5f, 5f, 5f, 5f);

    //创建字体
    iTextSharp.text.Font font = PdfUtil.CreatePdfFont(34F);

    pdfText.pdf.PdfWriter pdfWriter = pdfText.pdf.PdfWriter.GetInstance(document, fs);
    document.Open();

    //增加拣货单品列表
    pdfText.pdf.PdfPTable pdfpTable = PdfUtil.CreatePdfPTableToPickupLabel(modelTrade.Details, font);
    document.Add(pdfpTable);

    //增加品名备注            
    pdfText.Paragraph pgraph1 = new pdfText.Paragraph(modelTrade.ItemsDescription, font);
    document.Add(pgraph1);

    //增加:发货期限
    font.Color = pdfText.BaseColor.RED;
    pdfText.Paragraph pgraph2 = new pdfText.Paragraph(modelTrade.ShipLimitTimeText, font);
    document.Add(pgraph2);

    document.Close();
    fs.Close();

    return pdfFileName;
}

遇上草多的时候,我们一边耧草,一边能够唱部分歌曲,那个歌曲大多也是从广播里依旧电影上学来的,首要有《打靶归来》、《三大纪律八项注意》、《地道战》、《红星歌》等,还有一个是新来实
习的中校教的《太阳出来红艳艳》大家都很欣赏。在山野里,我们一起唱,或高或低,或粗或细,没有何人去在乎,只是声音大就足以。耧草的耙子随着我们有韵律的起起落落。有时一个傍晚会把嗓子搞得沙哑。喝点冷水,嗓子会疼,严重时第二天就说不出话来。二姨会瞪着双眼,又是一阵狠批。我又是一阵小绵羊一样的沉默。傻

  近期在和DHL物流公司(应该是个大商家)对接,取运单号的主意是调用对方提供的API,简单说,就是我们传一些发货地址和客户音信,要发的货物等,对方回来一个运单号和物流面单(就是我们Taobao快递上的面单)。过程吧,仍旧相比顺利的,经过一文山会海关系,最终依旧促成了意义

耧草的一大乐趣是会境遇野兔。冬季草木茂密的地点,也是野兔最爱藏身的地点,几个人同台往前赶着,突然一只野兔跑出来了,它会拐着弯地往前飞跑。我们会乱糟糟的呼叫“兔子哟!兔子哟!抓兔子哟!”,然后扔下耙子,急忙地追赶,兔子喜欢沿着沟底往上跑,大家哪是他的敌方,追一阵子,远远地看见野兔的人影,一阵痛惜,抱怨自己跑得太慢,心想尽管逮到一只野兔,这能顶得上多少篮子草。回来看一看扔得乱七八糟的耙子,总是忘不了看一看野兔趴过的窝,有时还会呈请试一试,再耧多少个往返,总是还会看一看这多少个地方。有时过了几天,还会想着这一个地点,还要再去看一下,总是小心翼翼的,盼望着野兔再回去这里,大家不会忽略,一定抓住它。这样的竞逐,大多是会让荆棘把棉裤撕破一些大口子,显露并不算太白的棉花,回家后我们的看待不会比逃跑的野兔差。

private static pdfText.pdf.PdfPTable CreatePdfPTableToPickupLabel(List<TradeDetailModel> listDetail, iTextSharp.text.Font font)
{
    pdfText.pdf.PdfPTable pdtTable = new pdfText.pdf.PdfPTable(5);
    pdtTable.WidthPercentage = 95;      //占宽度百分比:95%(这句很关键,作用是撑满整个面单)

    int[] colWidth = { 2, 4, 2, 2, 2 }; //设置列宽比例
    pdtTable.SetWidths(colWidth);

    //此处,先插入首行,即标题
    pdtTable.AddCell(new iTextSharp.text.Phrase("图片", font));
    pdtTable.AddCell(new iTextSharp.text.Phrase("基本信息", font));
    pdtTable.AddCell(new iTextSharp.text.Phrase("单价", font));
    pdtTable.AddCell(new iTextSharp.text.Phrase("数量", font));
    pdtTable.AddCell(new iTextSharp.text.Phrase("备注", font));

    //再插入真实拣货数据
    int rowCount = listDetail.Count;
    for (int i = 0; i < rowCount; i++)
    {
        TradeDetailModel modelDetail = listDetail[i];

        iTextSharp.text.Image image = PdfUtil.CreatePdfImage(modelDetail.ProductImageBytes);
        pdtTable.AddCell(image);
        pdtTable.AddCell(new iTextSharp.text.Phrase(modelDetail.ProductBase, font));
        pdtTable.AddCell(new iTextSharp.text.Phrase(modelDetail.Price.ToString() + Environment.NewLine + modelDetail.ProductID, font));
        pdtTable.AddCell(new iTextSharp.text.Phrase(modelDetail.Number.ToString() + Environment.NewLine + modelDetail.ProductSpec, font));
        pdtTable.AddCell(new iTextSharp.text.Phrase(modelDetail.Remark, font));
    }

    return pdtTable;
}

    2, DataTable中含有图表,也要能导出

  好吧,终于要引入正题了,DHL集团将物流面单以pdf文件流的样式重返,就是大家可以保存成Pdf文件,那样就便于处理的多,我们和好的拣货面单,如若也足以保存至Pdf文件,这样就足以将这2个Pdf文件一块打印出来,这终究一个折中的解决方案。

  下面仍然说说没有兑现的功效,如若都落实了,也不用写这篇博客了。不足之处在于DHL提供的面单,没有提供要拣哪些货的面单。本来一个完整的面单,包括2部分:物流集团索要贴在卷入上的面单(物流面单)和我们和好发货部门要发什么东西的面单(拣货面单),两局部组成在一齐,发货部门才能正常的形成那一个包裹的发货

    下面是调用的代码,仅供参考。注:再次回到的Pdf文件的相对路径,用于后续打印

  首先,要将拣货数据(含图片)保存至Pdf文档。技术点如下

    1,
那一点就是平昔开立iText夏普中的PdfDataTable对象,直接照射即可。代码如下:

  下边分别授课

    1, 将DataTable导出至Pdf

    3, 创立字体

    3, Pdf类库,字体的引入(居然需要引用字体的相对路径,想不通)

/// <summary>
/// 创建Pdf所需字体
/// </summary>
/// <returns></returns>
public static iTextSharp.text.Font CreatePdfFont(float fontSize = 16F)
{
    //黑体
    string fontPath = @"C:\Windows\Fonts\simhei.ttf";

    iTextSharp.text.pdf.BaseFont baseFont = iTextSharp.text.pdf.BaseFont.CreateFont(fontPath,
        iTextSharp.text.pdf.BaseFont.IDENTITY_H,
        iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED);
    iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, fontSize);

    return font;
}

 

  好了,最终的末段,看看效果图吧。前2联是DHL再次回到的Pdf文件,第3联是自家本地转移的Pdf文件,合并成一个完完全全的发货面单

    2,
那一点要先生成iText夏普(Sharp)中Image对象才足以,然后再随生成PdfDataTable中,将Image对象插入单元格(注意:图片尺寸需要定义好)。代码如下:

/// <summary>
/// 创建Pdf所需图像
/// </summary>
/// <param name="imageBytes"></param>
/// <param name="widthS"></param>
/// <param name="heightS"></param>
/// <returns></returns>
private static iTextSharp.text.Image CreatePdfImage(byte[] imageBytes, float widthS = 60f, float heightS = 60f)
{
    iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(imageBytes);

    //图片大小要求统一80x80,需根据实际图片        
    float perW = (float)Math.Round(widthS / image.Width, 2);
    float perH = (float)Math.Round(heightS / image.Height, 2);
    image.ScalePercent(perW * 100, perH * 100);

    //设置Dpi值,能够清晰些
    image.SetDpi(124, 124);

    return image;
}  

  再将这2个文件,通过C#代码连续打印出来。补助连续打印两个Pdf文件

  集团是跨境电商,需要和各个物流打交道,需要把东西送交物流,让她们发到世界各地。其中需要物流公司提供一个运单号,来追踪货物到达啥地方?!

图片 1

//直接调用cmd命令,实现直接打印
foreach (string printFile in listPrintFile)
{
    Process proc = new Process();
    proc.StartInfo.CreateNoWindow = false;
    proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    proc.StartInfo.UseShellExecute = true;
    proc.StartInfo.FileName = printFile;
    proc.StartInfo.Verb = "print";
    proc.Start();
    proc.Close();
}

  

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图