2

我的项目是创建一个类似 Vista Print 的应用程序。我创建了一个非常基本的界面,将可调整大小的 div 放置在可以拖动的区域中。我还可以通过带有设计模式的弹出 iframe 将文本放入此 div。然后我将其写入数据库。然后我调用此数据并使用 Coldfusions cfdocument 创建一个 pdf。

问题是在创建 PDF 时,字体看起来稍厚,而且自动换行与 html 页面界面不同,这一点非常重要。注意:自动换行由 div 的高度和宽度决定。它在 cfdocument 进程页面上看起来很好,它在创建 pdf 时就关闭了。有人对此有任何想法,或者可以向我指出一些可以提供帮助的信息吗?

提前致谢。

代码在这里:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<cfset webRes = "96">
<cfset pxlWidth = "921">
<cfset pxlHeight = "1178">
<cfset inWidth = (pxlWidth/webres)>
<cfset inHeight = (pxlHeight/webres)>

<cfquery name="qTextData" datasource="ds">
SELECT        DocID, TextID, Width, Height, PosX, PosY, FontFamily, FontColor, FontSize, TextValue
FROM            TextEditor
WHERE        ((DocID = #session.docid#))
</cfquery>


<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Create PDF</title>
</head>
<cfoutput>
<cfdocument filename="mypdf.pdf" name="mypdf" fontembed="yes" format="pdf" overwrite="yes" pageheight="#inHeight#" pagewidth="#inWidth#" pagetype="custom">
    <cfdocumentsection margintop="0" marginright="0" marginbottom="0" marginleft="0">
        <body align="center" marginheight="0" marginwidth="0">
            <div id="pageContainer" style="background-image:url(resources/image.caspx.jpg); background-repeat:no-repeat; height:#pxlHeight#px; width:#pxlWidth#px;">
                <cfloop query="qTextData">
                    <div id="divTextField_#TextID#" style="position:absolute; top:#PosY#px; left:#PosX#px; width:#width#px; height:#Height#px; color:#FontColor#; font-family:#FontFamily#; font-size:#FontSize#pt; vertical-align:text-top; line-spacing:normal;">
                        #TextValue#

                    </div>                  
                </cfloop>
            </div>
        </body>
    </cfdocumentsection>
</cfdocument>
</cfoutput>

<script type="text/javascript">
    window.open('http://linktopdf/mypdf.pdf','newWin','resizable=1');
</script>
</html>
4

1 回答 1

0

我尝试将此作为评论,但我开始啰嗦,而且它太大了,所以它可能不是“答案”,但如果没有别的,我相信它会包含一些有用的信息。

您查看的百分比是多少,您是否尝试将其打印出来?

我注意到事情可能看起来不平衡或比平时更大,因为它们只是在 acrobat(或您选择的 PDF 查看器)中呈现怪异。尝试调整缩放并查看显示是否发生变化,并查看打印是否正确。

我还发现就像 James 建议的那样,我需要特殊的 css 来处理文档。CSS 可能就像让 div 的一侧有一个大 1px 的边框以使其看起来正确一样奇怪。另请记住,尽管您在屏幕上查看 PDF,但它仍然是一种"print"媒体。PT 表示 1/72 英寸,当您从 19 英寸以上的显示器(受像素分辨率进一步影响)缩放到不知道什么是像素的 8.5" x 11" 纸时,它看起来会更大是。您可能需要尝试即时调整字体大小,例如:font-size: #fontSize-2#pt;. 更改-2为可能对您的输出有用的任何内容。您也可以尝试使用可缩放的单位,例如em.

cfdocument文档列出了所有受支持的 CSS 并确定了一些限制。似乎不line-spacing:normal;支持。还要确保所有 CSS 都包含在内联或样式标记中,但避免使用链接的 .css 文件。我看到您正在这样做,只是添加提示和指示。

此外,根据文档:

ColdFusion 不会返回该<cfdocument></cfdocument>对之外的 HTML 和 CFML。

这意味着 ColdFusion 正在处理您的cfset语句,但它不会返回

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Create PDF</title>
</head>

<script type="text/javascript">
    window.open('http://linktopdf/mypdf.pdf','newWin','resizable=1');
</script>
</html>

因此,iText 可能没有按照您的预期呈现它,因为

  1. 它没有文档类型
  2. 这是一个格式错误的 HTML 文档
于 2013-01-09T12:10:09.730 回答