|
Форум visio.getbb.ru |
О форумах
Библиотека | Частые вопросы | Литература | Склад материалов Visio Navigator | Blog | Полезные ссылки | О сайте История Visio | Продукты Visio |
| Для русскоязычных пользователей Visio. Начинающих и профессионалов. Где взять, как сделать, что купить и т.д. |
16.12.2016  
08.12.2015  
20.11.2015  
19.11.2015  
28.07.2015  
17.03.2015  
05.05.2014  
26.01.2012  
15.07.2009  
15.05.2009  
23.11.2005 (англ.) Несколько хитростей пользовательского интерфейса Visio 
Копирование и вставка в новую страницу в Visio 2002
Есть страница с планом помещений и расстановкой мебели. Копируем все и вставляем в новую страницу. При этом часть мебели улетает за пределы листа, часть остается, как и в оригинале, на своих местах, часть расползается по рисунку. Как победить это безобразие, чтобы все было на своих местах?
И правда летает! Мне понравилось! На первый взгляд причина кроется в том, что некоторые шейпы оказались привязанными к направляющим. Если копировать на другую страницу эти шейпы без направляющих, то им нечего подставить в формулу. Вот тут-то все и начинается. Если копировать все вместе с направляющими, выделив это по ctrl-A, то все копируется нормально и ничего не летает. Способ борьбы можно построить на основе того, что при смещении шейпа некоторые расчетные формулы меняются на числовые значения. То есть если выделить все нужные шейпы (в Вашем случае это правая половина листа) и клавишами сместить всю эту кучу на шаг вправо, а потом на шаг влево, то рисунок внешне не изменится. Но на самом деле вместо формул в нем будут уже числа. Пропадет и мешающая привязка. Если теперь скопировать несколько шейпов на другую страницу, то они уже не улетят.
Отображение данных шейпа в PDF
Существует ли возможность отобразить данные шейпа при конвертировании в PDF?
Это возможно, если у вас установлен Acrobat Standard. Ниже приведен пример файла Visio с макросом (см. источник). Макрос сохраняет документ в формате PDF в той же папке, затем читает данные шейпов на всех страницах и записывает их в виде комментариев в PDF. Проверено в Visio 2013 Pro, Acrobat XI Standard, документ Visio в метрической системе. 2. Использование Acrobat - не единственная возможность. Существует множество библиотек, работающих с комментариями. Например, можно воспользоваться open-source PdfSharp. Преобразование координат должно быть несложным. Внутренние единицы Visio - это дюймы, в PDF - точки, начало координат одинаковое (левый нижний угол). Поэтому формулы Visio_X*72, Visio_Y * 72 должны давать координаты X и Y в PDF. Пример размещения комментариев есть в http://www.pdfsharp.net/wiki/Annotations-sample.ashx. Ниже приведен скрипт powershell для добавления аннотаций с использованием рассмотренной выше методики (PdfSharp).
$visioFileName = $PSScriptRoot + "\demo\PdfNote.vsd" $pdfFileName = $PSScriptRoot + "\demo\PdfNote.pdf" Write-Host converting $visioFileName to $pdfFileName # Load PdfSharp assembly Add-Type -Path (Get-ChildItem -Filter PdfSharp.dll -Recurse $PSScriptRoot).FullName # start Visio and open the document $visio = New-Object -ComObject Visio.Application $visio.Visible = $true $visioDoc = $visio.Documents.Open($visioFileName) # Export PDF, all pages $visioDoc.ExportAsFixedFormat(1, $pdfFileName, 1, 0) # Open exported PDF with PdfSharp $pdfDoc = [PdfSharp.Pdf.IO.PdfReader]::Open($pdfFileName); for ($i = 0; $i -lt $pdfDoc.PageCount; $i = $i + 1) { $pdfPage = $pdfDoc.Pages[$i] $visioPage = $visioDoc.Pages[1 + $i] foreach ($visioShape in $visioPage.Shapes) { # if comment exists $comment = $visioShape.CellsU("Comment").ResultStr(0) if ($comment) { # add it as annotation $x = $visioShape.CellsU("PinX").ResultIU - $visioShape.CellsU("Width").ResultIU / 2 $y = $visioShape.CellsU("PinY").ResultIU + $visioShape.CellsU("Height").ResultIU / 2 $annotation = New-Object PdfSharp.Pdf.Annotations.PdfTextAnnotation $annotation.Title = $visioShape.Characters.Text $annotation.Contents = $comment $annotation.Icon = 6 # "note" icon # inches to points $point = New-Object PdfSharp.Drawing.XPoint(($x * 72), ($y * 72)) $size = New-Object PdfSharp.Drawing.XSize(0, 0) $rect = New-Object PdfSharp.Drawing.XRect($point, $size) $annotation.Rectangle = New-Object PdfSharp.Pdf.PdfRectangle($rect) $pdfPage.Annotations.Add($annotation) } } }
Источник (и подробности) - http://visguy.com/vgforum/index.php?topic=8581