【问题标题】:DPI setting ignored on image图像上忽略 DPI 设置
【发布时间】:2014-10-31 13:49:59
【问题描述】:

我有一个使用 OpenXML 处理的.docx 文档。我所做的一项任务是通过在原始文档中找到它的大小并生成一个 应该 大小正确的新文件来替换和图像。但是,在某些情况下并非如此。似乎这个词想忽略我的 DPI 设置,我不知道为什么。

例如,查看 XML,我有一个图像:

<wp:extent cx="4572000" cy="2971800" />

使用我想要的300 DPI 将 EMU 转换为像素,这应该给我975 x 1500 像素的尺寸(即2971800 * 300 / 914400 = 9754572000 * 300 / 914400 = 1500)。所以我生成我的图像并将其推送到文档中以代替原始图像。文档中的图像应该是3.25" x 5" 但是,当我加载生成的文档并查看word 中的“大小和位置”时,它声称图像的原始大小是10.16" x 15.62" 并缩小为@ 987654331@ 两个维度。文档中打包出来的图片确实是我想要的975x1500,但是Word好像把它当成96dpi(975/10.16 = 96)。所以我的问题是,它为什么要这样做,我该如何阻止它?我已经在BlipFill 上明确设置了 DPI,但它似乎被忽略了。

这是整个 XML 文档中的样子:

<w:drawing xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <wp:inline distT="0" distB="0" distL="0" distR="0" wp14:anchorId="1D5F6FCE" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing">
    <wp:extent cx="4572000" cy="2971800" />
    <wp:effectExtent l="0" t="0" r="0" b="0" />
    <wp:docPr id="2" name="Picture 2" title="work" />
    <wp:cNvGraphicFramePr>
      <a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" noChangeAspect="1" />
    </wp:cNvGraphicFramePr>
    <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
      <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
        <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
          <pic:nvPicPr>
            <pic:cNvPr id="0" name="Picture 2" />
            <pic:cNvPicPr>
              <a:picLocks noChangeAspect="1" noChangeArrowheads="1" />
            </pic:cNvPicPr>
          </pic:nvPicPr>
          <pic:blipFill dpi="300">
            <a:blip r:embed="rId13" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
              <a:extLst>
                <a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}">
                  <a14:useLocalDpi xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" val="0" />
                </a:ext>
              </a:extLst>
            </a:blip>
            <a:srcRect />
            <a:stretch>
              <a:fillRect />
            </a:stretch>
          </pic:blipFill>
          <pic:spPr bwMode="auto">
            <a:xfrm>
              <a:off x="0" y="0" />
              <a:ext cx="4572000" cy="2971800" />
            </a:xfrm>
            <a:prstGeom prst="rect">
              <a:avLst />
            </a:prstGeom>
            <a:noFill />
          </pic:spPr>
        </pic:pic>
      </a:graphicData>
    </a:graphic>
  </wp:inline>
</w:drawing>

【问题讨论】:

    标签: openxml docx


    【解决方案1】:

    要生成您想要的原始尺寸值,我相信您需要将图像二进制中的 DPI 值设置为 300 dpi。

    您提到的&lt;pic:blipFill&gt; 上的dpi 属性似乎仅在打印过程中被Word 使用,或者如果图像二进制文件没有DPI 值。在任何情况下,它都不用于计算文档中的图像显示大小。如果它记录在那里,Word 很可能更喜欢存储在图像本身中的 dpi 值。这可能值得使用图像查看器或您拥有的任何其他方式进行检查。通常,图像 dpi 默认为 72dpi。 96 是 Windows 下的系统“屏幕”dpi,这让我怀疑这是嵌入在图像二进制文件中的 dpi,尤其是如果它是由 Windows 应用程序生成的。

    要使图像在文档中以正确的尺寸显示,这就是您想要的 cx 和 cy 值。如果您将&lt;wp:extent/&gt; 中的那些设置为您想要的大小,那应该可以解决屏幕显示问题。但是,如果您希望它也以正确的尺寸打印出来,您还需要更改 pic:spPr/a:xfrm/a:ext 中的内容。

    从您的问题看来,它实际上以正确的大小显示,只是 Word 对话框中报告的 原始大小 不是预期值。我希望如果您获得图像中设置的实际图像 dpi 值,您会看到您所追求的行为。

    【讨论】:

    • 谢谢,经过更多研究后,我发现我包含的图像设置了96 dpi,这就是它所接受的。我将图像复制到一个新的位图并将 dpi 设置为300 并解决了问题。关于 dpi 属性实际作用的文档非常差,尽管搜索了整个 5,000 多页规范,但我在 useLocalDPI 属性上找不到任何内容。
    猜你喜欢
    • 1970-01-01
    • 2018-09-17
    • 2013-04-18
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多