Dodaj adnotacje do PDF z FTP w .NET
Ładowanie pliku PDF z serwera FTP i następnie dodawanie adnotacji do PDF jest powszechnym wymaganiem dla przedsiębiorstw, które przechowują starsze dokumenty w lokalnym magazynie. W tym samouczku zobaczysz dokładnie, jak pobrać plik z FTP, przekazać go do GroupDocs.Annotation i zastosować podświetlenia, komentarze lub kształty — wszystko bez zapisywania pliku na dysku. Po zakończeniu będziesz mieć wielokrotnego użytku wzorzec, który działa z dowolnym PDF‑em dostępnym przez FTP i może być rozszerzony na inne formaty obsługiwane przez GroupDocs.Annotation.
Szybkie odpowiedzi
- Co obejmuje ten samouczek? Ładowanie plików PDF z FTP i dodawanie adnotacji przy użyciu GroupDocs.Annotation dla .NET.
- Jakie główne słowo kluczowe jest celem? add annotations to pdf.
- Czy potrzebna jest licencja? Dostępna jest bezpłatna wersja próbna, ale użycie w produkcji wymaga ważnej licencji GroupDocs.Annotation.
- Czy mogę używać tego z .NET Core? Tak, kod działa z .NET Framework 4.6.1+ i .NET Core 2.0+.
- Czy uwierzytelnianie jest obsługiwane? Przykład pokazuje anonimowy FTP; możesz dodać
NetworkCredentialdla zabezpieczonego dostępu.
Co oznacza „add annotations to pdf”?
Add annotations to PDF oznacza programowe wstawianie podświetleń, komentarzy, pieczęci lub kształtów do istniejącego dokumentu PDF. GroupDocs.Annotation dla .NET udostępnia wysokopoziomowe API, które działa bezpośrednio na strumieniach, dzięki czemu możesz modyfikować PDF znajdujący się na zdalnym serwerze FTP bez konieczności wcześniejszego zapisywania go lokalnie.
Dlaczego ładować dokumenty z FTP?
Ładowanie dokumentów z FTP umożliwia aplikacjom dostęp do centralnie przechowywanych plików bez ręcznego kopiowania, zmniejsza opóźnienia poprzez przetwarzanie plików w miejscu oraz wspiera zautomatyzowane przepływy pracy, które pobierają dokumenty na żądanie, zapewniając użycie najnowszej wersji przy jednoczesnym zachowaniu zgodności z wewnętrznymi zasadami przetwarzania danych.
- Centralne przechowywanie: Ponad 70 % starszych przedsiębiorstw nadal korzysta z FTP do archiwizacji dużych ilości dokumentów.
- Przetwarzanie wsadowe: FTP pozwala pobrać setki plików w jednej operacji, umożliwiając zautomatyzowane potoki adnotacji.
- Zgodność: Lokalny FTP utrzymuje dane w kontrolowanych strefach sieciowych, spełniając wiele wymagań regulacyjnych.
Wymagania wstępne
- C# fundamentals – komfortowa praca ze strumieniami i wzorcami async.
- GroupDocs.Annotation dla .NET – download from the official release page and see the general release page.
- Poświadczenia FTP – host, username, password (if required) and permission to read the target files.
- Narzędzia programistyczne – Visual Studio 2019+ i .NET Framework 4.6.1 lub .NET Core 2.0+.
Jak dodać adnotacje do PDF z FTP w .NET?
W tym przewodniku pobierzemy plik PDF z serwera FTP, przekażemy strumień do GroupDocs.Annotation, dodamy adnotację podświetlenia i zapiszemy oznaczony plik — wszystko bez zapisywania plików tymczasowych na dysku. AnnotationConfig konfiguruje GroupDocs.Annotation do pracy z określonym strumieniem dokumentu i formatem. FtpWebRequest jest klasą .NET obsługującą operacje FTP, takie jak pobieranie plików. HighlightAnnotation reprezentuje wizualne podświetlenie umieszczone na stronie PDF.
Krok 1: Zdefiniuj lokalną ścieżkę wyjściową
Najpierw zdecyduj, gdzie zapisany zostanie oznaczony PDF po przetworzeniu. Użycie Path.Combine zapewnia prawidłowe separatory ścieżek w systemach Windows i Linux.
Uwaga: Folder wyjściowy musi istnieć przed wywołaniem
Save. Utwórz go programowo w razie potrzeby.
Krok 2: Pobierz strumień PDF z FTP
Metoda pomocnicza GetFileFromFtp otwiera FtpWebRequest, odczytuje odpowiedź do MemoryStream i zwraca strumień ustawiony na początek. Ten strumień jest konsumowany przez GroupDocs.Annotation.
Wskazówka bezpieczeństwa: W środowisku produkcyjnym zawsze ustaw
request.Credentials = new NetworkCredential(user, pass)i włącz SSL (EnableSsl = true), aby chronić poświadczenia.
Krok 3: Zainicjalizuj GroupDocs.Annotation ze strumieniem
AnnotationConfig informuje GroupDocs.Annotation, z jakim typem pliku pracujesz i który strumień odczytać. Przekazanie strumienia bezpośrednio eliminuje pliki tymczasowe i zmniejsza obciążenie I/O.
Krok 4: Dodaj adnotację podświetlenia
Utwórz HighlightAnnotation (lub inny typ adnotacji) i skonfiguruj jej położenie, rozmiar oraz kolor. Przykład używa jasnego żółtego (BackgroundColor = 65535), który wyróżnia się w większości PDF‑ów.
Krok 5: Zapisz oznaczony dokument
Wywołaj annotation.Save(outputPath), aby zapisać zaktualizowany PDF w miejscu określonym w Kroku 1. Wyjście konsoli potwierdza sukces i wyświetla pełną ścieżkę.
Krok 6: Otocz wszystko blokiem try/catch
Operacje sieciowe są podatne na przekroczenia czasu i błędy uprawnień. Umieść cały przepływ w bloku try/catch, zaloguj wyjątek i opcjonalnie ponów pobranie.
Typowe problemy z ładowaniem FTP i rozwiązania
Przekroczenia limitu czasu połączenia
Serwery FTP mogą zamykać nieaktywne połączenia po krótkim czasie. Zwiększ limit czasu, ustawiając request.Timeout = 30000 (30 sekund) lub wyżej.
Niepowodzenia uwierzytelniania
Jeśli otrzymasz błąd 530, sprawdź ponownie nazwę użytkownika/hasło i upewnij się, że konto ma uprawnienia do odczytu w docelowym katalogu. Przejście na FTPS (EnableSsl = true) często rozwiązuje problemy związane z poświadczeniami.
Zapora i tryb pasywny
Wiele korporacyjnych zapór blokuje kanał danych używany przez aktywny FTP. Włącz tryb pasywny za pomocą request.UsePassive = true, aby klient mógł otworzyć połączenie danych.
Obsługa dużych plików
Dla PDF‑ów większych niż 100 MB rozważ strumieniowanie odpowiedzi bezpośrednio do pliku tymczasowego, a następnie otwarcie FileStream dla GroupDocs.Annotation. Zapobiega to przechowywaniu całego pliku w pamięci.
Rozważania dotyczące bezpieczeństwa
- Nigdy nie zakodowuj na stałe poświadczeń – store them in Azure Key Vault, AWS Secrets Manager, or environment variables.
- Preferuj FTPS lub SFTP – plain FTP transmits credentials in clear text.
- Waliduj adresy URL – restrict the FTP host to a whitelist to avoid SSRF attacks.
- Sanityzuj nazwy plików – reject paths containing
..or unexpected characters to prevent directory traversal.
Przykłady zastosowań w praktyce
- Portale przeglądu regulacyjnego – Pull compliance PDFs from an on‑prem FTP archive, let auditors add comments, and store the annotated version back to a secure location.
- Automatyzacja raportów legacy – Daily financial reports land on an FTP drop folder; the service automatically highlights key figures and emails the annotated report to stakeholders.
- Asystenci migracji – When moving documents from FTP to a cloud DMS, annotate each file with migration status flags without manual intervention.
Wskazówki optymalizacji wydajności
- Reuse
FtpWebRequestobjects when processing multiple files to reduce handshake overhead. - Execute FTP calls asynchronously (
await GetFileFromFtpAsync) to keep UI threads responsive. - Cache frequently accessed PDFs locally for a short period (e.g., 5 minutes) when the same file is annotated repeatedly.
- Batch annotate – load several PDFs into separate
Annotationinstances, apply annotations, and then persist them in a single I/O operation.
Najczęściej zadawane pytania
Q: Czy mogę adnotować typy plików inne niż PDF?
A: Yes, GroupDocs.Annotation supports over 30 formats, including DOCX, PPTX, and common image types, all of which can be loaded from FTP using the same stream‑based approach.
Q: Jak dodać adnotację komentarza zamiast podświetlenia?
A: Instantiate CommentAnnotation, set its Text property, and add it to the Annotations collection just like the highlight example.
Q: Czy możliwe jest zapisanie oznaczonego pliku z powrotem na serwer FTP?
A: Absolutely. After saving locally, open a new FtpWebRequest with Method = WebRequestMethods.Ftp.UploadFile and write the file stream back to the remote path.
Q: Jakie wersje .NET są oficjalnie wspierane?
A: GroupDocs.Annotation for .NET works with .NET Framework 4.6.1+, .NET Core 2.0+, .NET 5, and .NET 6.
Q: Jak mogę obsłużyć PDF‑y zabezpieczone hasłem?
A: Pass the password to the AnnotationConfig constructor via the Password property before loading the stream.
Zakończenie
You now have a complete, production‑ready pattern for add annotations to pdf files that reside on an FTP server. By streaming the file directly into GroupDocs.Annotation you avoid unnecessary disk I/O, keep your application lightweight, and maintain full control over security and performance. Extend this foundation with authentication, progress reporting, or bulk processing to meet the demands of enterprise document workflows.
Aby uzyskać dodatkową pomoc, odwiedź forum wsparcia.
Ostatnia aktualizacja: 2026-07-06
Testowano z: GroupDocs.Annotation 23.12 for .NET
Autor: GroupDocs
using GroupDocs.Annotation.Models;
using GroupDocs.Annotation.Models.AnnotationModels;
using System;
using System.IO;
using System.Net;
string outputPath = Path.Combine("Your Document Directory", "result" + Path.GetExtension("input.pdf"));
string filePath = "sample.pdf";
using (Annotator annotator = new Annotator(GetFileFromFtp(filePath)))
{
// Annotation code will be added here
}
AreaAnnotation area = new AreaAnnotation()
{
Box = new Rectangle(100, 100, 100, 100),
BackgroundColor = 65535,
};
annotator.Add(area);
annotator.Save(outputPath);
Console.WriteLine($"\nDocument saved successfully.\nCheck output in {outputPath}.");
private static Stream GetFileFromFtp(string filePath)
{
Uri uri = new Uri(filePath);
FtpWebRequest request = CreateRequest(uri);
using (WebResponse response = request.GetResponse())
return GetFileStream(response);
}
private static FtpWebRequest CreateRequest(Uri uri)
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
request.Method = WebRequestMethods.Ftp.DownloadFile;
return request;
}
private static Stream GetFileStream(WebResponse response)
{
MemoryStream fileStream = new MemoryStream();
using (Stream responseStream = response.GetResponseStream())
responseStream.CopyTo(fileStream);
fileStream.Position = 0;
return fileStream;
}
request.Timeout = 30000; // 30 seconds
request.Credentials = new NetworkCredential("username", "password");