QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 4026|回复: 3
收起左侧

[求助] VB PlotToFile 生成的PDF文件打印纸质文件时图片模糊问题

[复制链接]
发表于 2015-7-8 11:56:09 | 显示全部楼层 |阅读模式 来自: 中国北京

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 wangxu_1018 于 2015-7-8 12:02 编辑
4 m$ F4 K6 F0 w8 ^, o/ W
5 e& U. r0 @9 L# ?. X版主及各位朋友:中午好!: i# g0 q* X+ V% U
      
8 Q# G( y- m0 X. ]        CAD版本:AutoCAD Electrical 2010$ c' n8 r: L7 M5 v" Z1 H
" J2 D  O8 O. v5 a# O% h
        我在vb程序中处理dwg打印为pdf时遇到如下问题,希望得到各位的帮助,谢谢!6 z$ B, ^& `6 n+ m( r
        问题如下:% ~9 Q- L/ t' V
        我之前开发了一段程序(见下面嵌入的代码),通过 Acade - DWG To PDF.pc3  打印为pdf文件,生成pdf没有问题,但是生成的pdf文件一直也没有去打印为纸质版,最近需要打印时发现原DWG文件中引用的图片(公司logo)及由Excel中copy到DWG中的表格(好像也是图片了)出现模糊的情况。
' z# s0 i8 R6 j& e9 c6 X$ H$ n% t" P+ F- t  C
        上述问题不管的手动选取“ Acade - DWG To PDF.pc3”打印机还是程序均有问题。后来尝试手动选取“Adobe PDF”打印,生成的PDF是没有问题  B# z4 y, X) Y2 S1 w) L

  M! G  ^% \5 m- y% Z5 W# n* _8 Y         后来尝试有程序实现“Adobe PDF” 去打开PDF,但有遇到”仅依靠系统字体;不使用文档字体(N)“的问题。' o$ h0 F/ B! i" v6 D9 Z
         尝试去修改打印机首选项,但Adobe PDF 打印机的首选项中没有找到关于”仅依靠系统字体;不适用文档字体“的设置(不确定是否版本问题)
* x/ R- f* C/ d, j. u0 N/ E
- \4 F  f2 Y+ p2 l; u- O* B) v        问题汇总:
$ V, T- e* }7 d        1、 “Acade - DWG To PDF.pc3”打印机 是否可以处理图片模糊的问题?5 S5 i1 U6 ^: H( A- C1 H% U$ ^
        2、 “Adobe PDF” 打印机如何设置字体?
8 \! m! t6 q7 o. g5 T        注:由于对AutoCAD也只是初学,对很多CAD本身的应用也还不是很熟悉,开发这块就更差了 还希望各位给予帮助。
  1. '---------------------------------------------------------------------------------------
    * X: ~' a. y; _
  2. ' Procedure : CreatePDF8 P* w% Z9 s! H6 D
  3. ' DateTime  : 2013-11-20
    " _6 c- E$ c+ x+ P* G
  4. ' Author    : xwang2 o: ?# K+ ]; g3 n
  5. ' Purpose   : CAD中DWG图纸导出PDF文件
    . D5 F' E6 T* ]0 q2 `; Y
  6. ' param     : acadDoc: AcadDocument
    , x6 P7 n) A7 W, {$ c% c8 @# L
  7. '           : filename:  DWGFile) T6 R7 F4 o9 B0 \
  8. '           : strPdfFile PdfFile  Q; \. M- O: J& k1 p
  9. '           : ConfigName: Acade - DWG To PDF.pc3
    5 g8 k) e" Z9 }: L* Q/ R: h0 {/ e
  10. '---------------------------------------------------------------------------------------
    % h# _6 d1 b4 a1 S6 {: r6 V$ C
  11. Public Function CreatePDF2(acadDoc As AcadDocument, filename As String, strPdfFile As String, ConfigName As String) As Integer
    2 A- m' e/ p, b0 Y3 b- [
  12. 6 z2 x) v. u* n" i5 A! ]- J7 D# [
  13.     Dim PtConfigs As AcadPlotConfigurations% f* ?$ ]; G4 m+ T- v, K( V" d
  14.     Dim PlotConfig As AcadPlotConfiguration
    ! W7 \8 g0 r% b/ S& ?! @( N& Z
  15.     Dim PtObj As AcadPlot
    $ J' w- y% ?- s- P: ?% {
  16.     Dim BackPlot As Variant
    $ p8 B0 Q7 l4 {: `1 l
  17.    
    3 P2 t- X  N3 \. I' _" @
  18.     Dim ent As AcadEntity 'Object
    $ ^) Z4 y3 T  F2 I) }1 G7 V+ |: J1 y
  19.     Dim blockRef As AcadBlockReference
    / z9 B# U, Y# `6 K' S
  20.     # o. I) o  l, O9 n3 V
  21. On Error GoTo ErrExit
    8 B% A2 ?/ W/ M6 X2 n& U

  22. / O$ j. c: e4 d$ P
  23.     Debug.Print "CreatePDF ------------------------------------------------->"( [& k; e* X1 N
  24.     Debug.Print "打印机:" & ConfigName6 J" L. I/ F0 Z% Q8 h7 K" F
  25.     For Each ent In acadDoc.ModelSpace
    $ G9 f; r# a" t/ J
  26.         If TypeOf ent Is AcadBlockReference Then7 V* U4 `8 m$ H# Z$ P
  27.             DoEvents
    7 K. r0 Z/ Z. S* D  \
  28.             Set blockRef = ent
    - L- s; B( X' G& W
  29.             If blockRef.Name = "ACE A3块" Or blockRef.Name = "ACE A4块" Then
    6 n. N" Y3 A+ f$ N1 D8 \

  30. ) @/ @( ]. c. |( h
  31.                 Debug.Print "块名称:" & blockRef.Name
    7 H3 P" Q9 Q" \/ X
  32.                
    , t# y. `$ F. s+ p
  33.                 '块引用的插入点$ Q1 B, x- ^: u( a
  34.                 Dim insertPoint As Variant: c$ Z) @/ \; b1 s& n! b$ C, d
  35.                 insertPoint = blockRef.InsertionPoint6 w/ V+ l0 X2 q8 ~0 w* |$ q  e
  36.                 '放大比例: M/ Q  |+ u8 J7 Y! c
  37.                 Dim xScale, yScale As Integer9 n9 W9 z9 ?( |" A
  38.                 xScale = blockRef.XScaleFactor
    ' r& A9 N2 Z$ z% D
  39.                 yScale = blockRef.YScaleFactor
    % P$ @# ?' i; `9 E( L
  40.                 ) ?$ z2 c: g. Y' Y
  41.                 acadDoc.ActiveLayout.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"
    ) m: `9 Q9 L( Q
  42.                 Set PtObj = acadDoc.Plot
    ( e% |4 ^" `2 i, Q% m8 b
  43.                 Set PtConfigs = acadDoc.PlotConfigurations0 E' Z# w: N0 L1 y) ?  S' W
  44. 2 W- u- h8 D3 \$ G
  45.                 PtConfigs.Add "PDF", False* ?3 }# w6 F& X1 `( T8 A, ~0 w# e
  46.                 Set PlotConfig = PtConfigs.Item("PDF")
    $ z2 M$ [2 s; u+ t
  47.                 PlotConfig.StandardScale = acScaleToFit( u6 Y& n3 ~. b& k! {6 M# k8 i
  48.                                 , M  v! }9 S3 K1 N$ _' _
  49.                 PlotConfig.ConfigName = ConfigName '"Acade - DWG To PDF.pc3"% ^% }6 o' L( A$ ]. D& K+ d2 v* G
  50.                 'ANSI_A_(8.50_x_11.00_Inches)
    & D  ?0 ]) u# i6 D& U& |6 c
  51.                 PlotConfig.RefreshPlotDeviceInfo7 k$ s+ E' p6 G4 o7 @( P

  52. ! \# x* }7 j* w) ?. V
  53.                 Debug.Print "After打印样式:" & acadDoc.ActiveLayout.StyleSheet
    & r5 z: ]% _5 T1 [" {' R
  54.                 Debug.Print "After图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    : `5 T! W' U/ `6 s* p7 }
  55.                
    / R* N4 @* s5 i1 F. P
  56.                 acadDoc.ActiveLayout.StyleSheet = "monochrome.ctb" '黑白样式
    0 S0 m) }% G  a' r3 b7 D! s
  57. " a, c( x+ H" q2 I/ G
  58.                 '使用图形文件的线宽
    , z# v0 W- K2 g
  59.                 PlotConfig.PlotWithLineweights = True8 |. y- a1 ?% B7 T1 j! Y& y6 \5 f
  60.                 '是否启用打印样式
    5 k& e: V; s; _$ h  e) U
  61.                 PlotConfig.PlotWithPlotStyles = True
    ! [8 o& Y8 w" |( W3 e
  62. 6 u6 E/ R- l$ H9 M
  63.                  '宽高基数
    # v1 t' y& h* n* A% y2 j  A! Z# r
  64.                 Dim width, height As Double
    ; Y! ]$ s! C. R  ]4 X! O
  65.                 If blockRef.Name = "ACE A3块" Then
    1 h5 o: [) |! g% g
  66.                     width = 420- J5 ?% D1 t+ Z. J
  67.                     height = 297! k8 z$ B+ F: l8 W& A; L
  68.                     acadDoc.ActiveLayout.PlotRotation = ac90degrees
    / T9 P2 u3 e, a2 F$ J2 p
  69.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A3_(297.00_x_420.00_MM)"
    ' F$ g7 F+ z' Y  ?1 G6 [7 Q
  70.                 ElseIf blockRef.Name = "ACE A4块" Then
    : y  |4 W  U' y: P) R
  71.                     width = 210
    0 N2 b6 b0 ], [# Y
  72.                     height = 297
    8 O( w. ~# g$ ?$ D0 P! K9 p2 o
  73.                     acadDoc.ActiveLayout.PlotRotation = ac0degrees
    & m1 L  a- c7 E) k+ w+ p1 u
  74.                     acadDoc.ActiveLayout.CanonicalMediaName = "ISO_expand_A4_(297.00_x_210.00_MM)"
    + {2 q4 P# N- j2 F7 u  N9 [
  75.                 End If; J+ x5 u% Z6 H8 m. Z0 Q" b, a
  76.                   
    " E& o6 ]! q9 \/ [3 q, L
  77.                 '打印区域
    % I+ a$ r. F8 C$ ?
  78.                 Dim UpperRight(0 To 1) As Double, LowerLeft(0 To 1) As Double  ^) i) S2 g0 K2 k2 Z  _2 O: _" W
  79.                 LowerLeft(0) = insertPoint(0)
    ; S& D$ v, n( V5 c: c. g
  80.                 LowerLeft(1) = insertPoint(1)6 A$ C$ ^+ C1 H; t$ T& [) c
  81.                 UpperRight(0) = insertPoint(0) + width * xScale8 \5 ], A' ?: f
  82.                 UpperRight(1) = insertPoint(1) + height * yScale
    + S1 ~7 _" z  h7 G
  83.                 ) F7 |4 f* N* b+ l! j
  84.                 '设置定义要打印的布局范围的坐标8 i8 J$ y6 A/ u/ X& D
  85.                 acadDoc.ActiveLayout.SetWindowToPlot LowerLeft, UpperRight
    1 `8 h: j' x& {( }1 g9 A
  86.                 '指定布局或打印配置的类型
    8 g+ r4 `3 _5 C
  87.                 acadDoc.ActiveLayout.PlotType = acExtents
    7 D" D" A9 J+ ]" c" D: T  n  v
  88.                 5 c: @' y0 e! T  ^- J' S
  89.                 BackPlot = acadDoc.GetVariable("BACKGROUNDPLOT"): i8 N$ n- M% Y* H$ I, z3 a
  90.                 acadDoc.SetVariable "BACKGROUNDPLOT", 0
    1 A' |; Z3 r* z5 B3 b9 i0 r
  91.                 PlotConfig.RefreshPlotDeviceInfo
    * T+ l; {% u9 d2 M
  92.                
    1 V6 o# F5 n5 Z7 C1 @. w
  93.                 Debug.Print "Befor打印样式:" & acadDoc.ActiveLayout.StyleSheet5 H( d; f9 t$ l% Q. h
  94.                 Debug.Print "Befor图纸尺寸:" & acadDoc.ActiveLayout.CanonicalMediaName
    9 f  z, T/ S  x$ D3 r9 T
  95.                 Debug.Print "图形方向:" & acadDoc.ActiveLayout.PlotRotation
    8 i3 y4 C5 d- X6 I/ I; Q, e
  96.                 Debug.Print "打印机:" & acadDoc.ActiveLayout.ConfigName
      S1 W# t! p) \  d3 ]4 v
  97.                 ( c3 u. Z0 [9 n4 K
  98.                 strPdfFile = strPdfFile 'Replace(acadDoc.FullName, "dwg", "pdf")
    4 d- u4 ~) [9 A! x5 Y* ^
  99.                 Debug.Print "输出位置:" & strPdfFile, C! F! @1 ~, b; D' \+ ^, Z
  100. 2 P0 ]. s# l* f$ p! Z
  101.                 'Now you can use the PlotTofile method1 W/ p/ a) z: f4 F" o3 i' z0 U
  102.                 If PtObj.PlotToFile(strPdfFile, PlotConfig.ConfigName) Then! j) `- E7 M2 q" E2 p
  103.                      Debug.Print "PDF Was Created"
    . q( p' {* T8 g
  104.                      Debug.Print "PDF Was Created"( H3 n) U$ y1 u
  105.                 Else
    0 @, M0 _0 D, O8 O4 b. W
  106.                      Debug.Print "PDF Creation Unsuccessful!"7 O2 s& l2 I7 B4 H! z, ?
  107.                      Debug.Print "PDF Creation Unsuccessful!"4 L9 K, m. g1 p$ s1 W
  108.                 End If
    - d  M7 T  h$ C2 T* K4 p9 p* ^
  109.                 PtConfigs.Item("PDF").Delete. U$ U  [, b7 j  e- v- Z
  110.                 Set PlotConfig = Nothing
    ' q0 Z/ U2 h% _. B9 p
  111.                 acadDoc.SetVariable "BACKGROUNDPLOT", BackPlot
      o! B3 J3 E. Q  M
  112.                 3 _4 m. p3 y0 c: C
  113.                 Debug.Print "CreatePDF ok!"
    ( L- A7 c8 @: V) M$ q
  114.             End If" ~' ^  x1 n% P
  115.         End If! K. y5 p- O1 e5 ?. f
  116.         DoEvents
    3 M( P9 q, G& j& B
  117.     Next ent, Y2 d9 S7 c0 }7 H
  118.     Debug.Print "CreatePDF -------------------------------------------------<"
    6 s7 L* e& b' D6 U' `+ z* r
  119.     Exit Function: c. _8 S7 N+ e9 A! _$ b
  120.     " z+ E. @; ^5 H* v" ?5 B1 v6 }2 O
  121. ErrExit:5 D5 p" r+ C; l! X  B, [. ]' `
  122.     CreatePDF2 = -1# q7 a1 k% r( R
  123.     Debug.Print "CreatePDF Error:" & Err.Description
    + s9 ]# T9 R. k- M
  124.     MsgBox "CreatePDF error:" & Err.Description+ E  d! o0 c7 {7 s; L5 @0 g5 z( O
  125. End Function
复制代码
仅依靠系统字体;不使用文档字体.png
发表于 2015-7-8 20:57:19 | 显示全部楼层 来自: 中国辽宁营口
本帖最后由 woaishuijia 于 2015-7-8 21:13 编辑 0 E  R: j" G' j( c( ^4 _, P

% p7 Y' W0 k( X3 X在"页面设置"对话框的"打印机/绘图仪"框架中的"名称"下拉列表中选择"DWG TO PDF.PC3"打印机& n3 ^6 U$ `5 j6 N9 y* J
Untitled-1.gif
6 q& k8 P  Z* F点击"名称"下拉列表框右侧的"特性"按钮,弹出"绘图仪配置编辑器"对话框.
1 o2 E. t2 y/ |% l; k9 J$ H在"设备和文档设置"选项卡的树形目录中点击"自定义特性",其下方显示"访问自定义对话框"框架.  n8 {: p2 i: N; Z1 x
Untitled-2.gif : ^( ^* v) o+ o7 n9 ^
再点击"访问自定义对话框"框架中的"自定义特性"按钮,弹出"DWG TO PDF 特性"对话框2 K/ [: \2 p& D
Untitled-3.gif ) T: T1 G  Y+ h* U* F4 E1 e8 J
返回到"页面设置"对话框,在"打印机/绘图仪"框架的"名称"下拉列表中选择"ADOBE PDF"打印机& B$ j: V  y: i7 e8 j9 T$ P8 V* R
Untitled-4.gif
2 X" b2 o6 X. \+ V0 w9 V# v6 l3 J继续前面的步骤) k- G" o! G+ H3 J  Z. K/ T" M1 t5 p: ]
Untitled-5.gif
$ a/ h7 Q7 y( H) r Untitled-6.gif
 楼主| 发表于 2015-7-10 22:47:02 | 显示全部楼层 来自: 中国辽宁大连
@woaishuijia 版主! m- c' D! T, x
非常感谢您的帮助,过程中遇到的2个问题已经解决。
- `: @* U  \% [/ p4 D5 H; V[问题1] 、PDM生成的PDF图纸中OLE引用(由Excel中copy过来的表格)图片、公司LOGO图片模糊。, ]; H. D+ T  \0 a  a
解决方案:在对PDF文件打印时,取消打印界面“作为图像打印”的复选框后再打印就不会存在模糊的问题。
$ G3 I  ]/ a4 x8 O" h# K
, h8 V. i- g# g- V8 z+ j9 K; ?[问题2]、打印PDF文件时提示“无法找到或创建字体 TimesNewRomanPSMT,XXXXXX”。
+ L6 U% Z) p5 o5 r# ]解决方案:原因是由于客户端安装的pdf查看工具版本影响,经过测试安装AdbeRdr11000_zh_CN.exe版本在打印时就没有问题。

评分

参与人数 1三维币 +10 收起 理由
woaishuijia + 10 技术讨论

查看全部评分

发表于 2016-8-3 09:03:24 | 显示全部楼层 来自: 中国广东佛山
谢谢分享,我的问题也解决了。哈哈
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

快速回复 返回顶部 返回列表