74Camaro Ответов: 1

Как добавить гиперссылку на изображение с помощью migradoc и C#?


I have a project that needs a hyperlink embedded in an image that is part of a header. The Header is replicating to additional PDF pages automatically.

Just to be clear, I want to generate the PDF, and then click on the image and a browser tab will open up and display a website. I do not want to pull an Image from a website and imbed it into my PDF.

The image is the first object in the document.

My PDF is working great otherwise.

Here is some of my code which gets the image and displays it:



bmp.Save(combinesfinalpath);   // Save the Image


// Retrieve the Image and add to the Header    
MigraDoc.DocumentObjectModel.Shapes.Image image = sec.Headers.Primary.AddImage(@"C:\Users\" + userName + @"\" + "AppData" + @"\" + "Roaming" + @"\" + "PN" + @"\" + "PH2.png");


//Adjust the Image to fit page
image.Height = "3.0cm";
image.Width = "16.0cm";
image.LockAspectRatio = true;
        
 


// Start Adding Header Text       
sec.Headers.Primary.AddParagraph();  // insert blank paragraph

Paragraph paragraph = sec.Headers.Primary.AddParagraph();
        
paragraph.Format.Font.Color = Colors.Red;
paragraph.Format.Font.Size = "9";
paragraph.Format.Alignment = ParagraphAlignment.Right;
paragraph.AddFormattedText("Website  |  Facebook  |  Instagram        ", TextFormat.Bold);


....code continues


Что я уже пробовал:

Examples for Hypertexting just plain Text is fairly easy, but with a header image it's a little harder to find.

I did find this, but the example does not have the image as part of the header:


Hyperlink hyperlink = paragraph.AddHyperlink(str, hyperlinkType.Web)
hyperlink.AddImage(...);


I don't define my first paragraph until after the Image is displayed, so I get an error on the line.  Again this image is in the Header, so I'm searching for an example or help on that.

So to be more specific, the error I get is "Cannot use local variable before it's declared".

For the heck of it I typed in this line of code right after the MigraDoc Image, but before I add the first paragraph (text):


Hyperlink hyperlink = paragraph.AddHyperlink("http://yahoo.com/", HyperlinkType.Web);


With the line right above, it didn't like paragraph because it has not yet been declared, which makes sense.

This leads me to the believe it might not be the right solution for me, not only because it does not reference the Header status, but because the image is declared before I need a paragraph to start displaying text.  

I can always add a new paragraph in, but not sure how to add the image, as a header, to the PDF, which is my original problem.

Sorry for the run on...

Gerry Schmitz

Наклейте текст (с прозрачным фоном) поверх изображения: то же самое, что и "обычный текст". Или сделайте изображение "фоном".

74Camaro

Привет, Джерри, Спасибо за комментарий.
Вы имеете в виду использование GFX.Drawstring с цветом текста, который является 100% прозрачным?
Разве это не PDFSharp, а не MigraDoc?

Gerry Schmitz

Это было "псевдокодовое" решение. Это PDF; вы беспокоитесь о том, кто что делает, когда вы должны думать в терминах того, что делает PDF. Он содержит "метаданные", которые говорят ему, как представить. Я не могу представить себе создание пользовательских PDF-файлов без некоторого представления о том, что находится внутри PDF-файла и как он делает то, что делает. Возможно, вы создадите пользовательский этап процесса "до / после".

74Camaro

Хорошо, спасибо, хорошая мысль!
Я понимаю метаданные, описывающие другие данные, но без рабочего кода у меня возникают проблемы.

Во всяком случае, я предполагаю, что мне нужен предварительный этап обработки, так как все определяется до того, как изображение будет добавлено в раздел. Однако я могу только intellisense мой путь через это так много, рабочий пример или что-то даже смутно близкое к нему было бы неплохо.

Не прося никого написать весь проект за меня, это последние несколько строк из проекта, насчитывающего более 20 тысяч.

Gerry Schmitz

Я люблю хорошие документы.

https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/pdf_reference_archives/PDFReference.pdf

Richard Deeming

- Я получаю сообщение об ошибке на линии."
И вы не думали, что это поможет нам сказать, что это за ошибка?

74Camaro

Привет, Ричард, извини за это, я обновил свой раздел о том, что я пробовал.

1 Ответов

Рейтинг:
2

74Camaro

добавлен новый абзац для команды hypertext.