【问题标题】:Save Paragraphs as a PDF dynamically?将段落动态保存为 PDF?
【发布时间】:2016-03-27 17:13:48
【问题描述】:

是否可以使用 JSPDF 将包含边框的段落<p> 保存为 PDF,合并格式并将元素保持在页面中心?

以下代码允许在将文本粘贴到textarea 时生成段落。正如Fiddle 中所展示的,似乎可以将表格另存为 PDF。


但是,是否可以将以下动态段落和边框动态保存为 PDF?

如果可以提供更新的小提琴,将不胜感激,因为我还是编码新手。

JSFiddle

谢谢!

HTML:

 <div align="center"> 
     <h4 align="center">
         <u>Paste text in the field below to divide text into paragraphs.</u>
    </h4> 
    <textarea placeholder="Type text here, then press the button below." cols="50" id="textarea1" rows="10">
    </textarea>
    <br><br>
    <button id="Go">Divide Text into Paragraphs!</button> 
</div>
<hr> <h2 align="center">Dynamic Paragraphs will appear below: <br>[Paragraphs below for saving as PDF]</h2> <div> <div align="center" id="text_land" style="font-family: monospace"> </div></div>

JQuery:

   $(function(){$("#Go").on("click",function(){for(var t=$("textarea").val(),e=300;t.length;){for(;t.length>e&&" "!==t.charAt(e);)e++;$("#text_land").append("<br></br><p>"+t.substring(0,e)+"</p><br></br>"),t=t.substring(e),e=300,$("p").attr("contenteditable","true"),$("p").addClass("text")}})}),$("select").on("change",function(){var t=$("#text_land p"),e=this.dataset.property;t.css(e,this.value)}).prop("selectedIndex",0),end;

CSS:

@media print{p{page-break-inside:avoid}}p{position:relative}@media print{.no-print,.no-print *{display:none !important}}p{border-style:solid}p{color:#000}p{display:block;text-align:justify;border-width:5px;font-size:19px}p{overflow:hidden;height:300px;width:460px;word-wrap:break-word}

【问题讨论】:

    标签: javascript jquery html css pdf


    【解决方案1】:

    我已经编辑了您的代码。请see your sample here (edited)

    我用过:

     background-color: white;
    

    在“text_land”上

    编辑:

    我检查了html2canvas.js它解析html元素树并根据它们的样式进行绘制。

    最顶层 html 元素的宽度 - 渲染树的“text_land”被视为结果图像的宽度。页面缩放后超出“text_land”div 的所有内容均未呈现。

    我们的想法是为打印提供不同的样式。

    【讨论】:

    • 但是,在调整窗口大小或缩放时,实际段落元素的大小会比保存为 PDF 时指定的大小改变。此外,PDF 文档将段落拆分为两个单独的页面,而不是允许段落通过页边距移动到下一页。因此,是否有可能解决这些问题?
    • @Dave 将pagesplit: true 更改为pagesplit: false 以确保没有分页符,并且由于您的p 具有固定宽度,因此窗口的宽度无关紧要。如果您希望p 跟随窗口,请将p 的规则更改为像width:80%;min-width:460px; 一样的百分比
    • 另外,保存为 PDF 时,文本似乎很模糊。这是一个可以解决的问题吗,因为它似乎是来自 html2canvas 的问题。
    • 关于生成的 PDF 的模糊性 - 是的,我也注意到了这一点。我还注意到另一件事:当我以毫米为单位设置 jspdf A4 纸张尺寸,然后创建与我为 jspdf 设置的尺寸相同的 html div 时,该 div 渲染得比 jspdf 纸张尺寸大得多两者:宽度和高度。我认为这与用户系统的像素密度有关:jspdf 使用小像素密度。我认为与用户的像素密度相比,jspdf 的低像素密度也应该是导致生成的 pdf 模糊的原因。我需要深入研究。
    【解决方案2】:

    我确实对你的两个小提琴进行了改造,并提出了一些可行的方法,请看看这个小提琴

    $(document).on('click','#Go',function(){                                
    var value = $('#textarea1').val();
    
    
    a=value.replace(/\r?\n/g,'<br/>');
    $('#text_land p').html(a);
    console.log(a);
    });
    
    $(document).on('click','#print',function(){
    
    
     var pdf = new jsPDF('p', 'pt', 'letter');
     pdf.addHTML($('#text_land')[0], function () {
     pdf.save('Test.pdf');
     });
    
    });
    

    我用过 html2canvas 库。

    这里是a link to fiddle


    UPDATED FIDDLE!


    updated fiddle where resizing windows does not affect the oucome

    【讨论】:

    • 但是,段落框在生成为 PDF 时,与小提琴相比似乎看起来不同。此外,背景颜色不再像以前的小提琴那样是白色的。是否有可能解决这些问题,因为我注意到保存为 PDF 时框的模糊与以前的小提琴相比更清晰?
    • 调整 JSFiddle 窗口大小时,段落标签的 PDF 大小发生变化,不是原始大小。是否有可能解决这些问题?
    • 我已经尝试稍微改变一下css,更新答案伙伴
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 2017-08-31
    • 1970-01-01
    • 2018-08-22
    • 2015-08-11
    • 2017-01-14
    相关资源
    最近更新 更多