noob to C# здесь, используя примеры iTextSharp со всех сторон. Я создал базовый exe, чтобы изменить название, описание и ключевые слова для существующего PDF. Использование MS Visual C# 2010, я не понимаю, все эти изменения 'Generic' на языке C#, так что я получаю эту ошибку:Свойства iTextSharp с использованием HashTable или что-то еще?
Cannot implicitly convert type 'System.Collections.Generic.Dictionary<string,string>' to 'System.Collections.Hashtable'
и
Cannot implicitly convert type 'System.Collections.Hashtable' to 'System.Collections.Generic.IDictionary<string,string>'. An explicit conversion exists (are you missing a cast?)
Кодекс:
using System;
using System.Collections;
using System.IO;
using System.Linq;
using System.Text;
using iTextSharp.text.pdf;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
if ((args == null) || (args.Length < 3))
{
Console.WriteLine("args: PDFProp [fileName] [outputPath] [Title] [Description] [Keywords]");
Console.WriteLine();
Console.Write("<Continue>");
Console.ReadLine();
return;
}
string filePath = args[0];
string newFilePath = args[1];
string title = args[2];
string desc = "";
string keywords = "";
if (args.Length > 3)
desc = args[3];
if (args.Length > 4)
keywords = args[4];
Console.Write(filePath + "->" + newFilePath + " title: " + title + " description: " + desc + " keywords: " + keywords);
Console.WriteLine();
Console.ReadLine();
PdfReader pdfReader = new PdfReader(filePath);
using (FileStream fileStream = new FileStream(newFilePath, FileMode.Create, FileAccess.Write))
{
// string title = pdfReader.Info["Title"] as string;
PdfStamper pdfStamper = new PdfStamper(pdfReader, fileStream);
// The info property returns a copy of the internal HashTable
Hashtable newInfo = pdfReader.Info; // error 1
newInfo["Title"] = title;
if (args.Length > 3)
newInfo["Description"] = desc;
if (args.Length > 4)
newInfo["Keywords"] = keywords;
pdfStamper.MoreInfo = newInfo; // error 2
pdfReader.Close();
pdfStamper.Close();
}
}
}
}
Ваш, безусловно, правильный, поэтому я буду голосовать. Я просто хотел добавить, что при открытии новой библиотеки с C# иногда проще использовать ключевое слово 'var' при получении методов вызова и доступа к свойствам. 'var newInfo = pdfReader.Info;' Вы можете определенно злоупотреблять 'var', но для таких вещей это может быть очень полезно. –
Крис, да, но для ясности я предпочел бы использовать полное определение, чтобы избежать путаницы. –
Ahh thankyou, ребята, я для жизни меня не видел, где: pdfReader.Info был определен как словарь, где есть документация для pdfReader.Info? – ChrisAdmin